[Android] Hilt

1. 정의

Google에서 개발한 라이브러리로, Android에서 의존성 주입을 더 쉽게 하기 위한 표준 방식

 

2. 장점

- Android에서 의존성 주입을 쉽게 간단하게 지원할 수 있음.

- 수명 주기를 자동으로 관리하여 애플리케이션에서 DI를 사용하기 쉬움.

- Dagger에서 제공하는 Compile 정확도, Runtime 성능, 확장성을 누릴 수 있음.

- 테스트, 디버그, 출시 와 같은 다양한 빌드 유형에 서로 다른 결합을 프로비저닝하는 쉬운 방법을 제공

 

3. 제공하는 기능

- Android의 클래스를 나타내는 사전 정의된 결합 [Ex) Application, Activity]

- 사전 정의된 한정자 [Ex) @ApplicationContext, @ActivityContext]

- Hilt가 자동으로 생성하는 구성요소와 함께 사용할 범위 주석 

- Android Framework 클래스를 통합하기 위한 구성요소 

 

4. 종속 항목 추가 방법 [ kotlin.DSL 기준 ]

(1) build.gradle (Project Level)에 dependencies 추가

buildscript {
        dependencies {
            classpath("com.google.dagger:hilt-android-gradle-plugin:2.46")
            classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0")
        }
    }​

 

(2) build.gradle (App)에 plugin, dependencies 추가

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("kotlin-kapt")
    id("com.google.dagger.hilt.android")
}

dependencies {

    implementation("androidx.core:core-ktx:1.12.0")
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.10.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")

    androidTestImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test:core-ktx:1.5.0")
    androidTestImplementation("androidx.test:rules:1.5.0")

    // Room
    implementation("androidx.room:room-runtime:2.6.0")
    kapt("androidx.room:room-compiler:2.6.0")

    // Hilt
    implementation("com.google.dagger:hilt-android:2.46")
    kapt("com.google.dagger:hilt-android-compiler:2.46")
    kapt("org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.6.0")

    // Hilt Test
    androidTestImplementation("com.google.dagger:hilt-android-testing:2.43.2")
    kaptAndroidTest("com.google.dagger:hilt-android-compiler:2.43.2")

}

※ 주의 : build.gradle 설정 시, 각  Hilt 라이브러리 버전에서 지원하는 kotlin 버전을 사용해야 오류가 나지 않음.

kotlin 1.9.0을 사용하고 있는 현재는 hilt의 라이브러리 업데이트 버전이 2.46 이상의 라이브러리를 사용해야한다고 함.

[출처 : https://github.com/google/dagger/issues/4035]

 

(3) '@HiltAndroidApp'으로 주석이 지정된 Application 클래스 생성

@HiltAndroidApp
class LogApplication: Application() {}

 

(4) '@AndroidEntryPoint' 주석이 있는 다른 Android 클래스에 종속 항목 삽입

@AndroidEntryPoint
class MainActivity : AppCompatActivity() { ... }