📱 Android

[Hilt] 코드랩으로 Hilt 익히기 # 1

콩드로이드 2023. 1. 7. 20:16
 

Android 앱에서 Hilt 사용  |  Android 개발자  |  Android Developers

이 Codelab에서는 Hilt를 사용하여 종속 항목 삽입을 실행하는 Android 앱을 빌드해 보겠습니다.

developer.android.com

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