@InstallIn(SingletonComponent::class)은 Dagger Hilt에서 사용되는 어노테이션입니다. 이 어노테이션은 의존성 주입(Dependency Injection) 모듈이 어떤 DI 컨테이너에 포함되어야 하는지를 지정합니다. 이는 의존성의 수명주기와 관련이 있습니다.
예를 들어, 다음과 같은 모듈이 있습니다:
@InstallIn(SingletonComponent::class)
object ApiModule {
@Provides
fun provideRetrofit(): Retrofit {
// ...
}
}
위 예시에서 ApiModule은 애플리케이션 클래스에 바인딩되어 있으므로 애플리케이션이 존재하는 동안 계속 존재합니다. 그러나 Hilt가 Retrofit 인스턴스를 제공할 때마다 새로운 객체를 생성합니다. 그러나 @Singleton을 추가하면 매번 동일한 Retrofit 인스턴스를 반환합니다:
@InstallIn(SingletonComponent::class)
object ApiModule {
@Provides
@Singleton
fun provideRetrofit(): Retrofit {
// ...
}
}
따라서 @InstallIn(SingletonComponent::class)은 모듈이 애플리케이션 수명주기 동안 존재하도록 하며, @Singleton은 동일한 인스턴스를 유지하도록 합니다123.
이 두 어노테이션은 서로 다른 목적을 가지고 있으며, 애플리케이션의 의존성 주입 구성에 중요한 역할을 합니다.
이상은 copilot을 통해 배워보는 자료입니다.
이전 posting에서 사용했던 Dagger Hilt을 적용해 의존성 연결을 쉽게 해 보는 코드를 구혀해 보고 있는 중입니다. 아직 앱 project 을 체계적으로 만들어 보지 못하는 중이라... 조금은 더 정리된 모습의 코드을 구현해 보고자 하고 있습니다.
Dagger Hilt가 무엇인지 설명해 주세요.
Dagger Hilt는 안드로이드 애플리케이션에서 **의존성 주입(Dependency Injection)**을 간편하게 구현할 수 있도록 도와주는 라이브러리입니다. Hilt는 다음과 같은 목표를 가지고 있습니다:
- Dagger와 관련된 인프라를 단순화합니다.
- 표준적인 컴포넌트와 스코프를 제공하여 설정, 가독성, 앱 간 코드 공유를 용이하게 합니다 1.
Dagger Hilt는 Dagger2를 기반으로 하며, Android 프레임워크에서 자주 사용되는 DI 컴포넌트와 스코프를 기본적으로 제공하여 초기 DI 환경 구축 비용을 크게 줄입니다. 또한 Jetpack의 ViewModel에 대한 의존성 주입도 간단하게 구현할 수 있습니다. 아직은 알파 버전이지만, 앞으로 더 발전할 것으로 기대됩니다 23.
Hilt를 사용하면 Dagger 설정 코드를 생성하여 Android 클래스(예: 액티비티 및 프래그먼트)에 자동으로 삽입합니다. 이를 통해 보일러 플레이트를 줄이고 프로젝트의 가독성을 향상할 수 있습니다. Hilt를 프로젝트에 적용하려면 Gradle 설정을 추가하고 @HiltAndroidApp 어노테이션을 사용하여 Application 클래스를 초기화해야 합니다 4.
Dagger Hilt는 Android 애플리케이션 개발에서 DI를 간편하게 사용할 수 있도록 도와주는 강력한 도구입니다. 🚀
앱 기준의 gradle 파일에 추가해 보겠습니다.
//Dagger - Hilt
implementation "com.google.dagger:hilt-android:2.51"
ksp "com.google.dagger:hilt-android-compiler:2.51"
ksp "androidx.hilt:hilt-compiler:1.2.0"
implementation "androidx.hilt:hilt-navigation-compose:1.2.0"
// Paper
implementation "io.github.pilgr:paperdb:2.7.2"
위 설명과 같이 먼저 Manifest에 Application class을 추가해 봅니다.
<application
android:name=".core.GlobalApplication"
android:allowBackup="true"
...
다음은 Application class에 의존성을 주입해 봅니다.
@HiltAndroidApp
class GlobalApplication : Application() {
override fun onCreate() {
super.onCreate()
globalApplicationContext = this
init(this, getString(R.string.kakao_app_key))
val keyHash = getKeyHash(applicationContext)
Log.e("", "keyHash=$keyHash")
MobileAds.initialize(this) { }
Paper.init(this)
}
...
다음번에는 Paging을 구성하기 위한 준비를 해 보겠습니다.
'모바일 앱(안드로이드)' 카테고리의 다른 글
안드로이드 앱 만들기 ViewModel vs Remember function ... 퍼옴 (51) | 2024.04.21 |
---|---|
안드로이드 jetpack 생체인증 ... 요약 (45) | 2024.04.19 |
안드로이드 앱 만들기 Paging 처리의 개선 (55) | 2024.04.16 |
Jetpack compose UI 이벤트 처리 ... 요약 (33) | 2024.04.11 |
Koin을 이용한 내비게이션 구성 ... 요약 (26) | 2024.04.10 |