Kotlin에서는 생성자에 기본 값을 설정할 수 있다.
class Person(
val name: String = "test"
) { ... }
Hilt를 사용해서 의존성 주입을 하면 보통 다음 코드처럼 한다.
class AnalyticsAdapter @Inject constructor(
private val service: AnalyticsService
) { ... }
그런데 생성자에 다음과 같이 default value를 설정하려고 하면 오류가 발생한다.
class AnalyticsAdapter @Inject constructor(
private val name: String = "test",
private val service: AnalyticsService
) { ... }
Hilt에서 String 타입으로 주입할 객체를 찾지 못해서 그런 거 같다.
내 경우 테스트 코드 때문에 저렇게 처리를 해야 했는데, 아래 방법으로 해결이 가능하다.
class MyNetwork(
url: String,
networkJson: Json,
okHttpClientFactory: Call.Factory
) : MyNetworkDataSource {
@Inject
constructor(
networkJson: Json,
okHttpClientFactory: Call.Factory
) : this(
url = BASE_URL,
networkJson = networkJson,
okHttpClientFactory = okHttpClientFactory
)
}
주 생성자에는 필요한 변수를 전부 선언하고 @Inject 생성자에서는 주입받을 객체만 선언하면 된다.