반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Kotlin
- 조건문
- Flow
- 설치
- 스터디
- node
- 정보처리기사
- 코틀린
- script
- java
- 서버
- 이클립스
- Flutter
- kotlininaction
- SwiftUI
- express
- jquery
- ios
- 그림으로 배우는 서버구조
- node.js
- Eclipse
- android
- 변수
- php
- php개발
- Coroutine
- php변수
- 플러터
- 스나이퍼팩토리
- kotlin2.0
Archives
- Today
- Total
mygomii
[Android] Hilt을 활용하여 DI 적용해보기 본문
반응형
- Hilt는 Android 애플리케이션에서 의존성 주입(Dependency Injection, DI)을 단순화하기 위해 구글이 만든 라이브러리
- Dagger 위에 구축
간소화된 DI 구성
- Hilt는 Dagger의 복잡한 컴포넌트나 서브컴포넌트 구성을 대신해, 미리 정의된 컴포넌트(SingletonComponent, ActivityComponent 등)를 제공
Android 통합
- Android의 Application, Activity, Fragment, Service 등 다양한 컴포넌트에 쉽게 DI를 적용할 수 있도록 @HiltAndroidApp과 @AndroidEntryPoint같은 애노테이션을 제공
자동화된 라이프사이클 관리
- Hilt는 Android Component의 lifecycle에 맞춰 의존성의 범위(scope)를 자동 관리
모듈(Module)과 프로바이더
- @Module과 @InstallIn annotation을 사용해 의존성을 제공하는 코드를 작성할 수 있음
- Hilt는 이를 통해 필요한 인스턴스를 생성
안드로이드에 적용해보자
- gradle version 관리
[versions]
hilt = "2.48.1"
hilt-compose = "1.2.0"
[libraries]
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" }
hilt-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hilt-compose" }
[plugins]
hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
- gradle 설정
plugins {
...
alias(libs.plugins.hilt.android)
id("kotlin-kapt")
}
dependencies {
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
implementation(libs.hilt.compose)
}
- 모듈, 프로바이더 정의
- datasourceModule , serviceModule , usecaseModeul , networkModule , repositoryModule
- 아래 코드 처럼 모듈별로 설정해주었음
- @Module: DI 설정을 위한 모듈 클래스임을 나타냄
- @InstallIn(SingletonComponent::class) : 모듈을 애플리케이션 전체에 걸친 싱글톤 범위에 설치함을 의미합
- @Provides : 모듈 내에서 의존성 객체를 생성하여 제공하는 함수를 지정
- @Singleton: 제공된 의존성이 한 번만 생성되어 재사용됨을 보장
@Module
@InstallIn(SingletonComponent::class)
object RepositoryModule {
@Provides
@Singleton
fun provideNoticeRepository(noticeDataSource: NoticeDataSource): NoticeRepository {
return NoticeRepositoryImpl(noticeDataSource = noticeDataSource)
}
}
- Application 클래스에 Hilt 적용
@HiltAndroidApp class HiltApp : Application()
Android 컴포넌트에 주입
@AndroidEntryPoint class MainActivity : ComponentActivity() {
....
}
위처럼 작성하면 끝!
- compose에서 viewModel을 주입하는 방법
- 아래처럼 hiltViewModel 키워드를 사용해도 되고 아니면 여러가지 방법이 있으니, 상황에 맞게 찾아서 쓰자
@HiltViewModel
class MainViewModel @Inject internal constructor(
private val getNoticesUseCase: GetNoticesUseCase
) : ViewModel() {
...
}
@Composable
fun NoticeList(viewModel: MainViewModel = hiltViewModel()) {
...
}
https://github.com/mygomii/hilt-clean-architecture-sample.git
GitHub - mygomii/hilt-clean-architecture-sample
Contribute to mygomii/hilt-clean-architecture-sample development by creating an account on GitHub.
github.com
https://developer.android.com/training/dependency-injection/hilt-android?hl=ko
Hilt를 사용한 종속 항목 삽입 | App architecture | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Hilt를 사용한 종속 항목 삽입 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Hilt는 프로젝트에서 종속
developer.android.com
반응형
'Android' 카테고리의 다른 글
[Android] 드로이드나이츠 2025 (droidknights) (1) | 2025.06.17 |
---|---|
[Compose Multiplatform] Video Player(Android, iOS, desktop) (0) | 2025.03.22 |
[Android] Koin을 활용하여 DI 적용해보기 (0) | 2025.03.13 |
Flow Cold Stream(콜드 스트림), Hot Stream(핫 스트림) (0) | 2024.05.24 |
Gradle dependency 의 api와 implementation 차이 (1) | 2024.05.12 |