일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 알게되는
- Coroutine
- 자바
- 안드로이드강좌
- Gradle
- ReactiveProgramming
- 스레드
- g 단위테스트
- 코루틴
- 테스트
- kotlin강좌
- 글또
- 알고리즘
- theming
- 코틀린
- 책
- 병렬프로그래밍
- 병럴프로그래밍
- android
- 안드로이드
- Compose
- viewmodel
- mockito
- 디자인패턴
- 안드로이드스튜디오
- 커스텀상태
- k8s
- Kotlin
- 회고
- Rxjava
- Today
- Total
목록전체 글 (154)
선생님, 개발을 잘하고 싶어요.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IzAJq/btqDk7hDhN8/bKvr3MhbRVo330uF8eVTLK/img.jpg)
서론 요즘 한창, 습관 기록 애플리케이션 사이드 프로젝트를 진행 중입니다. 이번 프로젝트는 서버가 없는 앱을 개발해야 했는데요. 그래서 데이터 관리를 위해 Room을 사용하기로 했습니다. Room개발에 까탈스러운 점은, Database 생성에 context가 필요하다는 건데요. 그래서 적절히 개발 됬는지 확인하기 위해서 Activity에 Room 코드를 작성한다. 앱을 런치해서 해당 Activity로 이동한다. 로그를 확인하며 원하는 대로 동작하는지 확인한다. 이런 절차로 진행했습니다만 🤔 귀찮아졌습니다. 대상 Room을 처음 써보시는 분 Room을 써보긴 했지만 리팩터링에 고민이 있으신 분 AndroidTest라는 녀석을 보긴 했지만 평생 써본 적 없으신 분 이 글은 매우 Room초심자의 입장입니다만...
https://medium.com/androiddevelopers/easy-coroutines-in-android-viewmodelscope-25bffb605471 > 이 포스팅 내용이 훨씬 좋습니다. 이거 확인 고고 도입 즐겁게 Coroutine 을 적용하고, ViewModel 테스트 코드를 작성한 찰나 테스트가 실패하는 경우가 발생하니 바로, viewModel 의 viewModelScope 때문이다. viewModelScope.launch 로 코루틴 을 실행하지 않고, runBlocking 으로 테스트 쓰레드를 막으면 테스트가 원하는 대로 동작하지만, 실제로 앱을 키면 에러가 나게 된다. 해결 코루틴 테스트 지원 라이브러리를 사용한다. 1. gradle (app 단위)에 라이브러리를 추가한다. dep..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/F8eaw/btqC3rm6xdS/VtkQCHcgslNAv1aQpYeHt0/img.png)
Google Truth 에는 에러를 테스트 하는 표준적인 방법이 없더라... 그런데 junit 에도 마땅한 함수가 없는 것 같아서 이것 저것 뒤지다가 이 스택 오버플로우에서 해답을 찾았다. junit 4.13, junit 5 이상 에서만 assertThrows 라는 함수를 지원하더라. 주의 assertThrows 는 junit 4.13 이상 부터 지원하는 명령이다. (함수가 없다면, build.gradle 을 확인 해보자.)
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cXTTId/btqCSXeTmc5/SuaIwUZtjnaSuEZFXGT2wK/img.png)
서론 반응형 프로그래밍에 대한 블로그 포스팅을 보고 오시는 것을 추천드립니다. 오늘은 이전 포스팅의 이론적 내용을 실제로 구현해 놓은 라이브러리, RxJava에 대해서 소개해 드리려고 합니다. TL;DR RxJava에서 데이터 스트림을 표현하는 객체는 Observable이다. RxJava에서 데이터 스트림을 읽는 것을 구독이라고 한다. onNext 에서 데이터 스트림에 흐르는 값을 처리한다. onError 에서 에러를 처리한다. 구독을 표현하는 객체는 Disposable이다. Observable ObserverPattern에서 데이터 변경을 알리는 Subject와 데이터 변경 시 발동하는 Observer에 대해서 말씀드렸습니다. RxJava에서는 이 Subject를 Observable이라고 말합니다. O..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dpHg7v/btqCFx2GNd5/SVYycnUnhhZ6ziomr9tQIK/img.png)
서론 RxJava, 정말 정말 안드로이드 공부를 하거나 콘퍼런스를 볼 때 귀에 딱지가 앉을 정도로 많이 듣던 기술입니다. 그리고 익히는 것도 엄청나게 고생한 것 같습니다. (아직도 한참 멀었지만🙇♂️) 공식 문서, 콘퍼런스, 블로그 포스팅, 책처럼 다양한 방법으로 공부를 시도했고 작은 프로젝트에 써볼 수 있는 상황에 억지로 쓰면서 익혔습니다. 그리고 이제는 RxJava가 가진 장점을 (부분적으로)이해하였고 실제 프로젝트에 열심히 적용하고 있습니다. ReactiveX는 공식 문서 가이드가 Document 이상이 아닙니다. 라이브러리 공식 문서에 으레 있는 "실습으로 배우기"와 같은 내용이 아니에요. 실무 가이드가 아닙니다. Reactive의 개념이 무엇이고 어떤 연산자가 존재하는지 이론적으로 도형으로 그..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yf7Q2/btqCAPgle5w/8MDNLjHj94VQ9KKLDLGkoK/img.png)
도입 사실 화면 하나의 라이프 사이클은 어려울 것이 없다. 하지만 화면 두개 이상이 결합된 라이프 사이클은 조금 햇갈리는 경우가 많다. A화면에서 B화면으로 이동 할 땐 어떤 일이 일어나지? 뒤로가기를 누르면 어떤 일이 일어나지? A 액티비티와 A 프래그먼트의 관계가 어떻지? 그래서 그냥 한 번에 쭉 로그 찍어서 정리해 놓고 나중에 참조해보자. (그냥 실험 기록장 같은 거라 별 내용은 없다.) 안드로이드 액티비티 라이프 사이클 Activity 수명 주기에 대한 이해 | Android 개발자 | Android Developers An Activity is an application component that provides a screen with which users can interact in orde..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lYvXO/btqCjebhXpu/QlYstTcVqbKPVy9cMJAO91/img.png)
도입 "소소하게 블로그 포스팅하기"가 일종의 과업이 되는 요즘, 친구들과 일주일에 한 번씩 블로그 포스팅을 하고 하지 못하면 벌금을 내는 스터디를 진행하고 있었다. 하지만 목적은 철저하게 "블로그 포스팅 개수 채우기"에 귀결되는 경향이 있었는데 체계적인 시스템의 부재와 스터디 규칙의 모호함이 그 이유일 것이다. 그 와중에 지인의 페이스북 태그를 통해 글또라는 모임을 알게 되었는데 찾아보니 이번에 4기 모집이고 정교한 룰이 있는 기술 블로그 포스팅 모임이라는 것을 알았다. 그 중에도 가장 마음에 든 규칙은 다른 사람의 블로그를 읽고 리뷰를 남겨야 한다 는 규칙인데, 기존에 하던 블로그 스터디에서 아쉬웠던 부분을 긁어주는 규칙이란 생각이 들어서다. 기존 스터디는 자신의 블로깅에만 초점을 맞췄다면 이 규칙을 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Eq9N9/btqB9YUahYv/FKoNWj8LgMyKcpROKgMZW0/img.png)
도입 실제 프로젝트를 진행함에 있어서 의존성 주입(Dpendency Injection, 줄여서 DI) 프레임워크의 사용은 필수 불가결하다. 내가 사이드 프로젝트로 사용하던 Koin 도 매우 좋은 DI 프레임워크 이지만, 회사에서는 Dagger2를 사용해서 구현하고 있었다. Dagger는 어노테이션을 사용해서 컴파일 타임에 DI 코드를 작성해주기 때문에, Koin보다 진입장벽이 높았다. 어노테이션만 보고 코드 흐름을 이해하기가 어렵기 때문인데, 그래서 오늘은 가장 주요한 개념들 위주로 소개(라고 쓰고 정리)를 하려고 한다. 의존성 주입 (DI) 고오오대의 내 블로그 글 중에 Koin을 애찬하는 글이 하나 있는데, 그림으로 좀 더 쉽게 이해해보자. 의존성 주입이 없다면, Activity에서 원하는 객체(Ar..