본문 바로가기
[Dagger] Assisted Injection # Assisted injection 은 object 를 만들 때 몇몇 param 은 DI framework (Dagger 등) 로부터 주입받고, 나머지는 user 에 의해 creation time 에 제공받는 것을 이야기한다. Factory 가 이 param 들을 조합해서 object 를 생성한다. Dagger assisted injection # Dagger 의 assisted injection 을 사용하려면, constructor 에 @AssistedInject 를 마킹하고, assisted param 들에 대해 @Assisted 를 마킹해줘야 한다. class MyDataService @AssistedInject constructor( dataFetcher: DataFetcher, @Assiste.. 2022. 1. 28.
[Hilt] Entry Points What is an entry point? # Dagger 가 제공하는 objects 를 Dagger 의 inject 를 지원하지 않는 부분에서 접근하는 경계선이다. Dagger 의 object graph 에 접근하는 방법이라고 말할 수도 있다. When do you need an entry point? # non-Dagger lib 이나 Hilt 에 의해 지원되지 않는 android component 등에서 특정 dagger object 에 접근할 때 사용된다. How to use an entry point? # entry point 를 만들기 위해서는 binding 하고 싶은 type 에 대한 accessor method 를 interface 로 정의하고, @EntryPoint 와 @InstallIn.. 2022. 1. 27.
[android] DI with Hilt - Hilt 에 대해 알아보자 Dependency 추가 - build.gradle 에 hilt-android-gradle-plugin 을 추가하자. buildscript { ... ext.hilt_version = '2.35' dependencies { ... classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version" } } - app/build.gradle 에 plugin 과 dependency 추가하자. plugins { kotlin("kapt") id("dagger.hilt.android.plugin") } android { ... } dependencies { implementation("com.google.dagger:hilt-android:$hilt_ver.. 2022. 1. 26.
[android] Overview - Hilt 에 대해 알아보자 - DI 는 다음과 같은 장점을 제공한다. 1. 코드 재활용 2. 쉬운 리팩토링 3. 쉬운 테스트 DI 핵심 * DI 는 무엇인가? - 클래스들은 다른 클래스들을 참조하곤 한다. 예를 들어 Car 는 Engine 을 참조할 수 있다. Engine 과 같이 참조되는 클래스들을 'dependencies' 라고 부른다. - 필요로 하는 class 를 갖는 3가지 방법이 있다. 1. dependency 를 직접 만든다. 예를 들어 Car 가 Engine 을 직접 만든다. 2. 다른 곳에서 얻어온다. 안드로이드에서 Context 를 얻어오는 것이나 getSystemService API 를 호출하는 것을 생각하면 된다. 3. param 으로 전달받는다. 앱은 이 dependencies 를 제공할 수 있다. 예를 들.. 2022. 1. 25.
[android] 안전하게 flow 를 collect 하기! - android 에서는 보통 UI layer 에서 flow 가 collect 된다. LifecycleOwner.addRepeatingJob, Lifecycle.repeatOnLifecycle, Flow.flowWithLifecycle 등을 이용해서 쓸데없이 res 가 낭비되지 않도록 하는 방법에 대해 알아본다. 리소스 낭비 - CoroutineScope.launch, Flow.launchIn, LifecycleCoroutineScope.launchWhenX 를 사용하는 것은 Activity 가 bg 로 들어갈 때 Job 을 수동으로 취소해주지 않는 한 안전한 방법이 아니다. 위 API 들은 app 이 bg 상태에 있을 때도 flow producer 가 buffer 에 emit 을 하도록 하고, 따라서 .. 2021. 5. 11.
[android] LiveData 를 StateFlow or SharedFlow 로 교체하기 (StateFlow 와 SharedFlow 도 이해해보기) - Kotlin Coroutine 은 최근 SharedFlow 와 StateFlow 라는 2가지 type 의 Flow 를 소개했다. - LiveData 를 Flow 형태로 바꾸기 전에 LiveData 를 Flow 형태로 바꾸어야 하는 이유를 알아보자. 1. LiveData 는 UI 에 너무 bind 되어 있다. 2. LiveData 는 Android platform 에 너무 bind 되어 있다. 위의 이유로 LiveData 는 Presentation Layer 에서는 사용하기 괜찮을 수 있지만, Domain Layer 로 내려가기에는 ugly 해진다. Domain Layer 는 platform-independent 해야 하기 때문이다. - LiveData 를 pure Flow 로 교체할 수는 없다. 1... 2021. 5. 9.
[RxJava] 햇갈리던 subscribeOn, observeOn 의 thread 관계 정리 - subscribeOn 은 최초 호출의 것만 valid 하고, 그 이후에 사용하는 것은 모두 무시된다. - subscribeOn 은 처음 시작부분의 thread 를 결정하고, observeOn 을 만나는 순간부터 observeOn 에서 명시한 thread 로 변경된다. - just 를 사용하면 subscribe 시점이 아니라, 호출되는 시점에 바로 연산이 수행된다. subscribeOn 에서 명시한 thread 가 아닌 just 를 호출한 thread 에서 바로 호출된다. 메인에서 호출하면 loadDataSync 자체는 mainThread 에서 연산된다는 것이다. 그림에서 빨간 줄이 약간 혼란스러움을 줄 수 있는데, subscribing 자체는 io thread 에서 잘 수행된다. 이 말은 연산 자체는.. 2021. 5. 7.
[android] Write asynchronous DAO queries - Room 에 대해 알아보자 - UI 에서 query 하는 것을 막기 위해 room 은 main thread 에서 db 에 접근하는 것을 허락하지 않고 있다. 이 말은 DAO query 를 async 로 해야 한다는 것을 의미한다. Room lib 은 async query 를 위해 여러개의 framework 를 통합시켰다. - DAO query 는 3개의 category 로 구분될 수 있다. insert, update, delete 등의 one-shot write query one-shot read query observable read query Language and framework options - One-shot write Coroutines(suspend) Single, Maybe, Completable Listenabl.. 2021. 5. 6.
[android] Referencing complex data using Room - Room 에 대해 알아보자 - Room 은 primitive 와 boxed type 에 대한 converting 기능을 제공한다. 그렇지만 object reference 에 대한 converting 은 제공하지 않는다. Use type converters - Single db column 에 custom data type 을 mapping 하고 싶을 때가 있을 것이다. 이 기능을 지원하기 위해서는 TypeConverter 를 제공해야 하는데, 이 녀석은 custom class 를 Room 이 아는 type 으로 변환하는 기능을 제공한다. 예를 들어 Date 를 TypeConverter 를 통해 Unix timestamp 형태로 변환할 수 있다. class Converters{ @TypeConverter fun fromTimesta.. 2021. 5. 5.
반응형