12. 멀티 바인딩 하기 dagger의 멀티 바인딩을 사용하면 여러 모듈에 있는 같은 타입의 객체를 하나의 set, map 형태로 관리 가능 Set 멀티 바인딩 @IntoSet, @ElementsIntoSet -> @Provides 예제 코드 import dagger.Module import dagger.Provides import dagger.multibindings.ElementsIntoSet import dagger.multibindings.IntoSet @Module class SetModule { @Provides @IntoSet fun provideHello() = "Hello" @Provides @IntoSet fun provideWorld() = "World" @Provides @Eleme..
11. Dagger 바인딩의 종류 @Binds 모듈 내의 추상 메서드에 붙일 수 있음 추상 메서드 앞에 붙여 Binding을 위임 하는 annotation 반드시 하나의 매개 변수만을 가져야 함 매개 변수를 반환형으로 바인드할 수 있다. @Provides 메서드 대신 좀 더 효율적으로 사용할 수 있다. @Module abstract class MyModuleRandom{ @Binds abstract fun bindRandom(secureRandom: SecureRandom):Random } Random 객체를 SecureRandom 객체에 바인딩 @Binds는 객체를 생성하는 대신 Component 내에 있는 객체를 파라미터로 받아 바인딩하여 좀 더 효율적으로 동작하게 해줌 좀 더 자세한 예제 보러가기 ..
10. 범위 지정하기 각 컴포넌트에 @Scope 로 범위 지정 가능 하나의 인스턴스만 만들어서 참조하는 싱글턴 패턴과 비슷 컴포넌트의 인스턴스는 의존성의 제공 방법에 대한 동일 성을 보장 받을 수 있음 앱 생명주기와는 달리 별도로 생명 주기를 따로 관리 가능 example 안드로이드에서 애플리케이션, 엑티비티, 프래그먼트 인스턴스에 때한 범위 지정을 다르게 해서 관리하여 오브젝트 그래프의 생성과 소멸을 각자 관리 가능함 @Singleton 사용하기 @Singleton을 사용한 범위 지정 및 객체 재사용 @Singleton @Component(modules = [MyModule2::class]) interface MyComponent2{ fun getAny():Any } @Module class MyMod..
09. 한정자 지정하기 반환형으로 바인드된 객체를 식별하기 애매할 때 example: string 타입 2개를 반환 하는 경우 @Module class MyModuleEx{ @Provides fun provideHello() = "Hello" fun provideWorld() = "World" } string 형식 반환이 2개 있으므로 오류! 그러나 2개가 필요한 상황이 있을 수 있다. 이럴때는 javax.inject package 에서 @Named 어노테이션을 사용할 수 있다. import dagger.Component import dagger.Module import dagger.Provides import javax.inject.Inject import javax.inject.Named @Compo..
08. Lazy 주입과 Provider 주입 상황에 따른 의존성 주입 시점 늦추기 또는 새로운 객체 요청 Lazy Provider Lazy 주입 객체가 초기화되는 데 시간이 필요한 경우 바인드된 타입 T를 제네릭으로 갖는 Lazy를 만듦. get() 이불리기 전 까지는 초기화 되는것을 늦출 수 있음 import dagger.Component import dagger.Lazy import dagger.Module import dagger.Provides import javax.inject.Inject Lazy 를 dagger 말고 다른 Lazy 를 써서 삽질 좀 했네요. import 주의 합시다 cannot be provided without an @Provides-annotated method. 오류 해..