반응형
Introduce
- Hilt는 Android Application에 Dagger Dependency Injection을 통합하는 표준화된 방법을 제공한다.
- Hilt를 사용하면 Android 앱에 종속성 주입을 쉽게 추가할 수 있다.
- Hilt의 목표
- Android Application을 위한 Dagger 관련 인프라를 단순화한다.
- 가독성, 이해 및 코드 공유를 용이하게 하는 Standard set of Components 및 Scopes를 만든다.
- 다양한 빌드 유형에 서로 다른 바인딩을 쉽게 프로비저닝 할 수 있는 방법을 제공한다.
Hilt Application
- Hilt를 사용하는 모든 앱은 @HiltAndroidApp Annotation이 포함된 Application class를 사용해야 한다.
- @HiltAndroidApp은 Hilt Components의 코드 생성을 시작하고 생성된 Components를 사용하는 응용 프로그램의 기본 클래스를 생성한다.
- 코드 생성에는 모든 모듈에 대한 접근 권한이 필요하기 때문에 Application class를 컴파일하는 대상에는 모든 Dagger modules에 대한 종속성이 있어야 한다.
- 다른 Hilt Android entry points와 마찬가지로 Applications 또한 주입된 멤버이다. 즉, super.onCreate()가 호출된 후 Application에서 주입된 필드를 사용할 수 있다.
- 모든 주입된 필드는 onCreate에 생성되므로 나중에 혹은 조건부로 객체가 필요한 경우 Provider를 사용하여 주입을 연기할 수 있다.
@HiltAndroidApp
class MyApplication : MyBaseApplication() {
@Inject lateinit var bar: Bar
override fun onCreate() {
super.onCreate() // Injection happens in super.onCreate()
// Use bar
}
}
@AndroidEntryPoint
- @AndroidEntryPoint Annotation을 사용하여 다른 Android class에서 멤버 주입을 사용 가능으로 설정할 수 있다. 다음 다섯 가지 타입에서 주석을 사용할 수 있다. (ViewModel은 @HiltViewModel이라는 분리된 API를 통해 접근이 가능하다.)
- Activity
- Fragment
- View
- Service
- BroadcastReceiver
@AndroidEntryPoint
class MyActivity : MyBaseActivity() {
@Inject lateinit var bar: Bar // Bindings in SingletonComponent or ActivityComponent
override fun onCreate() {
// Injection happens in super.onCreate().
super.onCreate()
// Do something with bar ...
}
}
자세한 정보 :
https://kumgo1d.tistory.com/m/105
Android Entry Points (dagger.dev)
Hilt Modules
- Hilt Modules는 module을 install할 Hilt Components를 결정하는 @InstallIn Annotation이 있는 표준 Dagger Modules이다.
- Hilt Components가 생성되면 @InstallIn Annotation이 달린 모듈이 각각 @Component#modules 또는 @Subcomponent#modules를 통해 해당 Component 또한 Subcomponent에 설치된다.
- Dagger에서와 마찬가지로 Component에 모듈을 설치하면 해당 Componet 계층에서 SubComponent는 Component의 Binding에 접근할 수 있다.
- 마찬가지로 해당 @AndroidEntryPoint class에서도 접근할 수 있고, Component에 설치하면 Binding 범위를 지정할 수도 있다.
- 요약 : @InstallIn이 포함된 모듈은 Hilt Components에 설치될 수 있다.
@Module
@InstallIn(SingletonComponent::class) // Installs FooModule in the generate SingletonComponent.
internal object FooModule {
@Provides
fun provideBar(): Bar {...}
}
자세한 정보 :
https://kumgo1d.tistory.com/m/106
참고자료 :
Quick Start Guide (dagger.dev)
반응형