반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[Android] Hilt 본문
반응형
- 의존성, 주입에 대해 알기
- 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
'Android' 카테고리의 다른 글
[Android] Retrofit 서버 통신 값 null로 올 시 처리 (0) | 2023.12.17 |
---|---|
[Android] 안드로이드 공식 문서 정리 - Activity 개념 (0) | 2023.11.18 |
[Android] properties 값을 Manifest 및 다른 파일에서 사용하기 (0) | 2023.09.13 |
[Android] TimePicker Interval 설정 (0) | 2023.09.12 |
[Android] 프로젝트 변경 이력 보는 법(뒤로가기가 더이상 안될 때) (0) | 2023.09.02 |
Comments