안드로이드

[안드로이드] Hilt @Qualifier란 ?

이손안나 2022. 10. 31. 23:38

💡 Hilt로 Retrofit 모듈을 작성할 때 여러개의 URL을 처리해야 하는 경우에 Hilt가 어떤 메서드의 Retrofit 객체를 사용해야하는지 모른다. 이를 해결하기 위해 @Qualifier를 사용하여 annotation클래스를 사용한다.

 

ex)

만약 car를 요청할 때 hilt는 두 바인드 메서드에서 어느 종류의 car를 리턴해야 하는지 모른다. 이를 보완하기 위해

@Qualifier를 사용.

enum class OilType{
    GASOLINE,DIESEL,LPG
}
interface Car{
    fun getOilType():OilType
    ...
}

@InstallIn(ActivityComponent::class)
@Module
abstract class CarModule{
    
    @Binds
    fun bindGasolineCar(impl:GasolineCar):Car
    @Binds
    fun bindDieselCar(impl:DieselCar):Car
    ...
}
  • 아래와 같이 어노테이션 클래스를 만든다.
@Qualifier
annotation class GasolineCar

@Qualifier
annotation class DieselCar
  • 모듈에서 지정한다.
@GasolineCar
@Binds
fun bindGasolineCar(impl:GasolineCar):Car

@DieselCar
@Binds
fun bindDieselCar(impl:DieselCar):Car
  • 다음과 같이 사용한다.
@GasolineCar
@Inject lateinit var gasolineCar:Car

@DieselCar
@Inject lateinit var dieselCar:Car