Android 앱에서 Hilt 사용 코드랩을 따라 Hilt를 익혀보겠어요 ✏️
Hilt가 dagger를 기반으로 만들어진 DI라, Hilt도 Annotation을 씁니닷
라이브러리 추가하기
코드랩에 적혀있는 방법으로는 라이브러리가 추가가 안되더라구여,, 아무래도 최신버전이 아니라서 그런 거 같아요
1. plugin id 추가
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
2. 프로젝트 단위 build.gradle
plugins {
//...
id 'com.google.dagger.hilt.android' version '2.41' apply false
}
ext {
hilt_version = "2.41"
}
3. build.gradle(app)
implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
프로젝트 구조
코드랩에서 Hilt를 사용하기 전의 프로젝트 구조가 어떤지 대략적으로 살펴볼까요 🔍
우선, 코드랩의 앱은 어떤 버튼들이 클릭 되는지 로그를 남기는 기능을 합니다.
ServiceLocator : Room을 사용해 로그를 기록, 삭제
LogApplication : ServiceLocator를 가지고 있는 Application
Hilt를 사용하는 이유
- Dagger의 사용법을 획일적으로 단순화
- 가독성과 이해성을 높이고 Dagger의 러닝커브를 낮춤
- 쉬운 모듈 탐색 및 통합환경제공
Hilt의 Annotation
@HiltAndroidApp
: Application 클래스에 어노테이션을 달아줘야함
: 모든 의존성 주입의 시작점 , Hilt 코드 생성을 시작
@AndroidEntryPoint
: 안드로이드 클래스에 DI 컨테이너를 추가(Activity, Fragment, View, Service, BroadCastReceiver)
: 모든 클래스를 지원하진 않는다
: @Inject 를 사용해 삽입할 수 있다
@AndroidEntryPoint
class LogsFragment : Fragment() {
@Inject lateinit var logger: LoggerLocalDataSource
}
@InstallIn, @Module
: hilt에 모듈임을 알려주고(@module)
: 어떤 컴포넌트에 설치될지 지정(@InstallIn) 한다고 생각하면 된다 (올바르지 않은 컴포넌트, 스코프 사용 시 컴파일 에러 발생)
@InstallIn(ApplicationComponent::class)
@Module
object DatabaseModule {
}
Hilt로 ViewModel 주입
@HiltViewModel 사용
(예전 버전에서는 @ViewModelInject, @Assisted를 사용했으나 현재는 HiltViewModel을 사용)
@HiltViewModel
class MainViewModel @Inject constructor(): ViewModel() {
}
@AndroidEntryPoint
class BaseActivity : AppCompatActivity() {
private val viewModel : MainViewModel by viewModels()
}
아직 Hilt에 대해 다 공부한건 아니지만, 코드랩을 따라해야할지
미니프로젝트를 만들어야할지 잘 모르겠습니다 ㅠㅠ
아직 개념을 완벽하게 모르겠어서.. 이 부분엔 좀 더 고민해봐야겠어요 :(
'📱 Android' 카테고리의 다른 글
[Android] Clean Architecture (0) | 2023.01.08 |
---|---|
[Android] SOLID 원칙 (0) | 2023.01.08 |
DI (Dependency Injection) 의존성 주입 (0) | 2022.12.05 |
[Android] Custom Spinner (0) | 2022.08.09 |
[Android] Custom Rating Bar (0) | 2022.08.04 |