NOW OR NEVER

[Android] Hilt 본문

Android

[Android] Hilt

LAURA 2023. 10. 14. 08:41
반응형
  • 의존성, 주입에 대해 알기
  • Android에서 의존성 주입(Dependency Injection)을 간소화하는 라이브러리
  • 프로젝트에서 수동 의존성 주입을 수행하는 번거로움을 줄인다.
  • 수동 의존성 주입을 수행하려면 모든 클래스와 해당 의존성을 수동으로 생성하고, 컨테이너를 사용하여 의존성을 재사용하고 관리해야 함
  • Hilt는 프로젝트 내의 모든 Android 클래스에 대한 컨테이너를 제공하고 그 수명주기를 자동으로 관리하여 앱에서 DI(Dependency Injection)를 사용하는 표준 방법을 제공
  • 의존성 주입(Dependency Injection): 의존성 주입은 객체 지향 프로그래밍에서 사용되며, 어떤 객체가 다른 객체에 의존할 때, 이 의존성을 코드 외부에서 주입하는 방법을 의미. 이를 통해 객체 간의 결합을 줄이고 코드의 유연성을 높일 수 있다. 주로 생성자, 메서드 매개변수 또는 속성으로 의존성을 주입
  • 공식 문서 : https://developer.android.com/training/dependency-injection/hilt-android#groovy
  • 프로젝트 수준 build.gradle에 아래 코드 추가
plugins {
	...
    id 'com.google.dagger.hilt.android' version '2.44' apply false
}
  • 앱 수준 build.gradile에 아래 코드 추가
    • 생성된 코드에 대한 참조 허용 : Java나 Kotlin과 같은 언어에서는 Annotation Processor를 사용하여 코드를 자동으로 생성할 수 있다. 이렇게 생성된 코드는 원본 코드에서 참조되어 사용된다. ex) 클래스, 메소드, 인터페이스 등에서 참조 발생
plugins {
	...
    id 'kotlin-kapt'
    id 'com.google.dagger.hilt.android'
}

dependencies {
    ...
    implementation "com.google.dagger:hilt-android:2.44"
    kapt "com.google.dagger:hilt-compiler:2.44"
}

// 생성된 코드에 대한 참조를 허용
kapt {
    correctErrorTypes true
}
  • hilt는 자바 8을 사용하므로 컴파일 옵션이 java 8이여야 한다.
android {
	...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
  • hilt를 사용하기 위해서는 application class를 상속하는 파일이 반드시 필요하다
    • application class의 역할 : 앱의 전역적인 상태와 설정을 관리하고 앱의 생명주기를 추적한다.
  • manifest에 해당 클래스를 application 태그 내 android : name으로 작성
@HiltAndroidApp
class ExampleApplication : Application() {
}
  • @AndroidEntryPoint
    • 해당 어노테이션을 사용한 activity에 속해있는(의존관계에 있는) 모든 클래스들을 hilt annotation을 붙여줘야 한다. ex) fragment에 해당
    • hilt 객체를 자동으로 생성해줌
    • 예외
      • hilt에서는 ComponentActivity만 지원한다(AppCompatActivity를 상속 받는 activity)
      • hilt에서는 androidx.Fragment를 상속받는 fragment만 지원한다
      • hilt는 fragment를 유지해주진 않는다.
    • hilt로 주입하는 클래스는 private로 선언될 수 없으며 private로 선언할 경우 컴파일 에러 발생
    • hilt가 주입하는 클래스는 주입을 사용하는 다른 기본 클래스를 가질 수 있다. 이러한 클래스는 추상 클래스인 경우 @AndroidEntryPoint 주석을 작성할 필요가 없다.
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
}

 

  • hilt가 지원하는 안드로이드 클래스
    • Application (by using @HiltAndroidApp)
    • ViewModel (by using @HiltViewModel)
    • Activity
    • Fragment
    • View
    • Service
    • BroadcastReceiver
  •  Component hierarchy

Comments