@InstallIn 어노테이션은 Dagger-Hilt에서 사용되는 어노테이션으로, Hilt 모듈을 어디에 설치할 것인지 지정하는 역할을 합니다. 이 어노테이션은 Dagger-Hilt에서 DI (Dependency Injection) 설정을 쉽게 해주는 중요한 요소입니다.
기본 개념
Dagger-Hilt에서는 의존성 주입을 위해 여러 모듈을 정의하고, 이 모듈이 어떤 컴포넌트(범위)에 포함될지 지정해야 합니다. 이때 @InstallIn 어노테이션을 사용하여, 특정 모듈을 어떤 컴포넌트에 설치할 것인지 정의할 수 있습니다. @InstallIn은 기본적으로 @Component 또는 @Subcomponent와 같은 Dagger의 컴포넌트 개념에 대응됩니다.
사용 방법
Dagger-Hilt에서는 주로 다음과 같은 컴포넌트를 사용하여 의존성을 주입합니다:
- SingletonComponent: 애플리케이션의 전체 생애 주기 동안 하나의 인스턴스만 유지되는 컴포넌트입니다.
- ActivityComponent: 액티비티의 생애 주기 동안 의존성 주입을 관리하는 컴포넌트입니다.
- FragmentComponent: 프래그먼트의 생애 주기 동안 의존성 주입을 관리하는 컴포넌트입니다.
- ViewModelComponent: ViewModel의 생애 주기 동안 의존성 주입을 관리하는 컴포넌트입니다.
이 외에도 다양한 생애 주기별 컴포넌트가 존재합니다.
예시
1. @InstallIn(SingletonComponent::class)
SingletonComponent에 설치된 모듈은 애플리케이션 전역에서 한 번만 생성되어 사용됩니다. 주로 애플리케이션 단위로 한 번만 생성해야 하는 객체들에 대해 사용합니다.
@Module
@InstallIn(SingletonComponent::class) // SingletonComponent에 설치
object NetworkModule {
@Provides
fun provideApiService(): ApiService {
return Retrofit.Builder()
.baseUrl("https://api.example.com")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
}
이렇게 설정하면 ApiService는 애플리케이션의 전체 생애 주기 동안 하나의 인스턴스로만 존재하게 됩니다.
2. @InstallIn(ActivityComponent::class)
ActivityComponent에 설치된 모듈은 액티비티의 생애 주기에 맞춰 의존성을 관리합니다. 즉, 액티비티가 존재하는 동안에만 해당 객체가 존재합니다.
@Module
@InstallIn(ActivityComponent::class) // ActivityComponent에 설치
object ActivityModule {
@Provides
fun provideSomeDependency(): SomeDependency {
return SomeDependency()
}
}
이렇게 설정하면 SomeDependency는 액티비티가 존재하는 동안에만 사용됩니다.
3. @InstallIn(ViewModelComponent::class)
ViewModelComponent에 설치된 모듈은 ViewModel의 생애 주기 동안에 의존성을 관리합니다. ViewModel이 생성되고 파괴될 때 해당 의존성도 주입되고 파괴됩니다.
@Module
@InstallIn(ViewModelComponent::class) // ViewModelComponent에 설치
object ViewModelModule {
@Provides
fun provideGameRepository(): GameRepository {
return GameRepositoryImpl()
}
}
이렇게 설정하면 GameRepository는 ViewModel의 생애 주기 동안에만 사용됩니다.
요약
- @InstallIn 어노테이션은 Hilt 모듈을 특정 컴포넌트에 설치하여 해당 컴포넌트의 생애 주기에 맞는 의존성 관리를 할 수 있게 합니다.
- SingletonComponent, ActivityComponent, FragmentComponent, ViewModelComponent와 같은 다양한 컴포넌트를 사용하여 의존성의 생애 주기를 조절할 수 있습니다.
- 이 방식은 Hilt의 의존성 주입을 더 효율적으로 관리할 수 있게 해주며, 주입할 객체의 범위를 명확하게 정의할 수 있게 해줍니다.
'Android' 카테고리의 다른 글
[안드로이드] onCreate() 와 onPostCreate() 차이점 (0) | 2024.11.14 |
---|---|
[안드로이드][kotlin] withContext 란? (0) | 2024.11.13 |
[안드로이드][클릭아키텍처][Hilt] - @AndroidEntryPoint 사용방법 알아보기 (0) | 2024.11.12 |
[안드로이드][클릭아키텍처][Hilt] - @Provides 개념 및 사용방법 알아보기 (0) | 2024.11.12 |