Dagger2 (2)

HEETAE HEO·2022년 7월 19일
0
post-thumbnail

Subcomponent

Component는 계층관계를 만들 수 있습니다. Subcomponent는 Inner Class 방식의 하위계층 Component입니다.

Subcomponent는 Dagger의 중요한 컨셉인 그래프를 형성합니다. Inject로 주입을 요청받으면 Subcomponent에서 먼저 의존성을 검색하고, 없으면 부모로 올라가면서 검색합니다. 다시 정리해서 말하자면

하위 컴포넌트(Subcomponent)는 상위 컴포넌트(Component)의 그래프를 상속하고 확장하는 컴포넌트 입니다.

한번 서브컴포넌트를 이용해 컴포넌트간 의존성을 설정해보겠습니다.

Component 구조도

Application Component가 최상단에 있고 해당 Component는 ApplicationModule을 포함합니다. 이 모듈은 SubComponent로 Activity SubComponent를 포함해서 Activity Component는 Application Component와 Application Module의 프로바이더를 참조할 수 있게 됩니다. Fragment SubComponent 또한 마찬가지로 Activity Module, Activity SubComponent, Application Module, Application Component의 프로바이더를 참조할 수 있게 됩니다.

의존성 설정하는 법

@Component(modules = [AppModule::class])
interface AppComponent {}
@Module(subcomponents = [ActivitySubComponent::class])
class AppModule {}

ActivitySubComponent 설정하기

SubComponent에는 항상 빌더나 팩토리를 만들어주어야합니다. ActivityModule은 FragmentComponent를 SubComponent로 가집니다.

@Subcomponent(modules = [ActivityModule::class])
interface ActivitySubComponent {

	@Subcomponent.Builder
    interface Builder {
    	fun build(): ActivitySubComponent
    }
}
@Module(subcomponents = [FragmentComponent::class])
class ActivityModule {}

FragmentSubComponent 설정하기

ActivitySubComponent와 같습니다.

@Subcomponent(moudles = [FragmentModule::class])
interface FragmentSubComponent {

	@Subcomponent.Builder {
    	fun bind() : FragmentSubComponent
    }
}
@Module
class FragmentModule{}

Module

Component에 연결되어 의존성 객체를 생성합니다. 생성 후 Scope에 따라 관리도 합니다.

Dagger의 키 컨셉

Dagger는 그래프가 키 컨셉입니다. 의존성을 요청받으면 Subcomponent, Component, Inject 생성자 순으로 검색하여 주입합니다.

다음은 Dagger2를 이용해 작성한 Retrofit통신을 한 프로젝트입니다.

https://github.com/heetaeheo/Android-Dagger-MVVM.git

References

https://speakerdeck.com/maryang/dagger2-raiteuhage-hultgi
https://kotlinworld.com/110
https://dagger.dev/
https://github.com/google/dagger

profile
Android 개발 잘하고 싶어요!!!

0개의 댓글