Android에서 의존성 주입(DI / Dependency Injection)을 도와주기 위해서 Hilt 라이브러리를 제공해 줍니다.
Hilt 라이브러리를 사용하면 의존성 주입을 위해 Android 프로젝트에 컨테이너를 제공하고 수명 주기(Life cycle)를 자동으로 관리하여 불필요한 클래스 생성이나 자원관리에 도움을 받을 수 있습니다.
Hilt 모듈
Hilt 라이브러리에서 Constructor-inject(생성자 삽입) 삽입을 할 수 없는 경우
Hilt 모듈(@Module)을 사용하여 Hilt에 Binding 정보를 제공해줄 수 있습니다.
이때 Hilt 모듈은 @Binds와 @Providers로 Hilt binding 정보를 제공해줄 수 있습니다.
@Binds와 @Providers의 눈에 보이는 큰 차이점은
@Binds는 인터페이스 인스턴스(Interface instance)를 제공하는 것이고
@Provider는 클래스의 인스턴스(소유하지 않은 클래스)를 제공하는 것입니다.
추가로 살펴보면
인터페이스의 경우 바로 인스턴스를 생성할 수 없기 때문에
@Binds를 사용하여 인터페이스 인스턴스를 제공할 때 실제 사용되는 구현(Interface를 실제 구현한 클래스)을 Hilt에 알려줍니다.
@Binds
@Binds는 Hilt에 아래 정보를 알려줍니다.
함수 Return type : 인스턴스(Instance)로 제공되는 인터페이스
함수 매개변수(Parameter) : 실제 제공하는 클래스(구현)
@Module
@InstallIn(SingletonComponent::class)
abstract class ServiceModule {
@Binds
@Singleton
abstract fun provideServiceHelper(threeServiceHelper: ThreeServiceHelper): ServiceHelper
}
@Providers
@Providers는 의존성을 삽입하려는 클래스가 외부 라이브러리에서 제공되어 클래스를 소유하지 않은 경우(Retrofit이나 Room database)나 빌드 패턴 등의 인스턴스를 생성해야하는 경우 사용됩니다.
함수 Return type : 제공하는 인스턴스
함수 매개변수(Parameter) : 인스턴스의 종속 항목
함수 Body: 인스턴스를 제공하는 방법
@Module
@InstallIn(ActivityComponent::class)
object AppModule {
@Provides
fun provideRetrofitService(): RetrofitService {
return Retrofit.Builder()
.baseUrl("https://3edc.tistory.com/")
.build()
.create(RetrofitService::class.java)
}
}
'Android' 카테고리의 다른 글
error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ApplicationContext android.content.Context cannot be provided without an @Provides-annotated method. 해결 방법 (0) | 2021.09.27 |
---|---|
Kotlin KAPT(Kotlin Annotation Processing Tool) 이란 (0) | 2021.09.13 |
[Android] PID(Process ID)/UID(User ID) ADB로 확인하는 방법 (0) | 2021.09.07 |
[Android] logcat chatty 로그가 제대로 출력되지 않을 때 expire 1 line (0) | 2021.09.07 |
Android adb command list (0) | 2021.09.07 |
Android Annotation Summary (0) | 2021.09.07 |
List up Android version, SDK version, API level (0) | 2021.09.03 |
WifiNetworkSuggestion Example (0) | 2021.09.02 |