→ 같은 타입의 의존성이 2개 이상 있을 경우 Hilt가 자동으로 분류를 못 해준다. 그래서 Hilt에게 해당 부분은 이거야 라고 이름표를 붙여주는 것 “Qualifier” 입니다. 현재는 Payon부분만 구현되어있어 이러한 에러가 발생하지 않았지만 추후 결제 수단이 추가 될 경우 해당 부분은 필수로 작업해야한다.
1. core:data ReaderStrategy.kt -> core:domain ReaderStrategy.kt 코드 위치 변경
→ 인터페이스는 항상 상위 계층에 있어야 함
→ Clean Architecutre 원칙 : 상위 계층(domain)은 하위 계층(data, implementation)에 의존하지 않는다.
하위 계층이 상위 계청(interface)에 의존해야 한다.
core:data:Qualifier.kt
/**
* Qualifier(이름표) Annotation 만들기
*/
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class PayonReaderQualifier
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class SamsungPayReaderQualifier
core:data:ReaderFactory.kt
class ReaderFactory @Inject constructor(
@PayonReaderQualifier private val payonReader: ReaderStrategy,
@SamsungPayRederQualifier private val samsungReader: ReaderStrategy
) {
fun getReader(type: ReaderType): ReaderStrategy = when (type) {
ReaderType.PAYON -> payonReader
ReaderType.SAMSUNG_PAY -> samsungReader
}
}
core:payon:ReaderBindModule.kt
@Module
@InstallIn(SingletonComponent::class)
abstract class ReaderBindModule {
@Binds
@PayonReaderQualifier
abstract fun bindPayonReader(
impl: PayonReader
): ReaderStrategy
}