Hilt란?
Android용 DI(Dpependency Injection: 의존성 주입) 프레임 워크로, Google이 안드로이드 개발을 위해 Dagger를 기반으로 제공하는 Library이다. Dagger의 복잡한 설정을 단순화 하여 의존성 주입을 쉽게 사용 할 수 있도록 도와준다.
Hilt를 사용하는 이유
- 의존성 관리의 효율화
- → Hilt는 객체의 생성과 라이프사이클을 자동으로 처리하기 때문에 개발자가 수동으로 의존성을 생성하고 관리할 필요가 없음. Activity, Fragment, ViewModel등의 컴포넌트와 자연스럽게 통합됨
- 코드 재사용성 증가
- →Hilt는 Module을 통해 의존성을 정의하여 여러 클래스에서 같은 의존성을 쉽게 재사용할 수 있음
- 테스트 편의성 향상
- → 의존성을 주입하기 때문에 실제 객체 대신 목객체를 쉽게 주입하여 테스트를 단순화할 수 있음
Hilt의 종류
Hilt 적용
Interface, Retrofit, ViewModel에서 주로 사용 됨
- libs.versions.toml
- [versions]
hilt = "2.49" hiltPlugin = "2.49"
- [libraries]
- hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt"}
- hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt"}
- [plugins]
- hilt = { id = "com.google.dagger.hilt.android", version.ref = "hiltPlugin" }
-
- build.gradle.kts(:app)
- plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.hilt) id("kotlin-kapt") } android { hilt { enableAggregatingTask = false } } dependencies { //hilt implementation(libs.hilt.android) kapt(libs.hilt.compiler) }
-
- 빌드 오류Unable to find method ''java.lang.String com.squareup.javapoet.ClassName.canonicalName()'' 'java.lang.String com.squareup.javapoet.ClassName.canonicalName()'해결 방법build.gradle(:app)모듈에 enableAggregatingTask 코드를 추가한다.
-
- android{ hilt { enableAggregatingTask = false } }
- 방법1
- 오류 원인 최신 버전의 hilt에서는 클래스 경로를 집계(aggregate)하는 용도로 JavaPoet를 사용한다. javapoet의 'java.lang.String com.squareup.javapoet.ClassName.canonicalName()'을 찾지 못하는 것이 오류의 원인이다.
- 오류 현상
@HiltAndroidApp 등록 → @AndroidEntryPoint 등록 → Interfac, Interface Module, InterfaceImpl 생성 →Interface Impl(@Inject 사용), InterfaceModule(@Module, @InstallIn, @Bind or @Provides@Singleton)
Activity, Fragment → @AndroidEntryPoint
ViewModel → @HiltViewModel