오늘은 저번에 DI 라이브러리에서 조금 살펴보았던 Dagger와 Hilt에 대해 설명 해 보겠다.
Dagger & Hilt
- Dagger는 강력한 의존성 주입(DI) 라이브러리로, 컴파일 타임에 의존성을 해결하여 성능이 뛰어나다.
- Hilt는 Dagger를 기반으로 한 안드로이드 전용 DI 프레임워크로, 설정을 간소화하고 안드로이드 컴포넌트와 쉽게 통합할 수 있도록 도와준다.
주요 어노테이션
- Dagger 주요 어노테이션
@Component
: 의존성 그래프를 정의하는 인터페이스@Module
: 의존성을 제공하는 메서드를 정의하는 클래스@Provides
:@Module
내부에서 의존성을 제공하는 메서드에 사용@Inject
: 의존성 주입 대상 클래스의 생성자나 필드에 사용
- Hilt 주요 어노테이션
@HiltAndroidApp
: Hilt를 사용하기 위한 Application 클래스에 적용@AndroidEntryPoint
: 의존성을 주입받을 안드로이드 컴포넌트(Activity, Fragment 등)에 사용@Inject
: Hilt가 의존성을 주입할 수 있도록 대상 클래스의 생성자나 필드에 사용@Module
: Hilt에서 의존성을 제공하기 위한 모듈 정의@InstallIn
: Hilt 모듈이 적용될 컴포넌트의 범위를 지정 (ex: SingletonComponent)@Provides
: 의존성을 제공하는 메서드에 사용@Binds
: 구현체를 인터페이스에 매핑할 때 사용
Hilt의 주요 특징
- Dagger보다 간편한 설정
- 안드로이드 컴포넌트와 자동 통합
- 컴파일 타임 의존성 확인으로 성능 최적화
- 리플렉션 미사용 → 빠른 실행 속도
Hilt의 사용법
1. 의존성 추가
plugins {
id("kotlin-kapt")
id("com.google.dagger.hilt.android")
}
android {
...
}
dependencies {
implementation("com.google.dagger:hilt-android:2.51.1")
kapt("com.google.dagger:hilt-android-compiler:2.51.1")
}
// Allow references to generated code
kapt {
correctErrorTypes = true
}
2. Hilt 애플리케이션 클래스
Hilt를 사용하는 모든 앱은 @HiltAndroidApp으로 주석이 지정된 Application 클래스를 포함해야 한다.
@HiltAndroidApp
class ExampleApplication : Application() { ... }
3. 의존성 주입 예제
class Engine @Inject constructor() {
fun start() = "Engine Started"
}
@Module
@InstallIn(SingletonComponent::class)
object CarModule {
@Provides
fun provideCar(engine: Engine): Car {
return Car(engine)
}
}
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject lateinit var car: Car
}
'android' 카테고리의 다른 글
Android State Hoisting(상태 호이스팅) (0) | 2025.03.10 |
---|---|
Android XML과 Compose의 차이점? (0) | 2025.02.23 |
Android DI (0) | 2025.02.09 |
Android Coroutine(코루틴) (0) | 2025.02.03 |
Android Kotlin (0) | 2025.02.01 |