Hilt 란?
의존성주입(DI)를 위한 라이브러리이다.
나는 자바개발자로 시작했기 때문에 Spring boot 를 예로 들겠다.
spring boot 에서 @SpringBootApplication 로, 스프링부트 시작점이라는것을 알수있고
의존성 주입, 다양한 어노테이션을 사용할수있다.
1. 새 프로젝트 생성
안드로이드 스튜디오에서 New project 해주었다
안드로이드에서도 스프링처럼 어노테이션을 활용할수있는데, 그러려면 hilt 설정을 build.gradle에 추가해줘야한다.
2. Hilt 추가하기
// gradle(project)
buildscript {
dependencies {
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.50'
}
}
// gradle(app)
plugins {
id 'dagger.hilt.android.plugin'
id 'kotlin-kapt'
}
dependencies {
implementation "com.google.dagger:hilt-android:2.50"
kapt "com.google.dagger:hilt-android-compiler:2.50"
}
혹시 Unsupported metadata version. Check that your Kotlin version is >= 1.0 에러가 발생한다면,
https://dagger.dev/hilt/gradle-setup
Gradle Build Setup
Hilt dependencies To use Hilt, add the following build dependencies to the Android Gradle module’s build.gradle file: dependencies { implementation 'com.google.dagger:hilt-android:2.51' annotationProcessor 'com.google.dagger:hilt-compiler:2.51' // For in
dagger.dev
이곳에서 최신버전을 확인해서 적용시켜주자
3. Application 클래스 추가
MainActivity가 위치한 폴더에 자기가 원하는 이름의 코틀린 클래스를 추가해준다.
package com.example.network_sample
import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class NetworkApplication : Application(){
}
@HiltAndroidApp 어노테이션을 사용함으로써 의존성 주입이 가능해졌다.
지금은 아무 내용도 입력하지않을것이지만, 나중에는 전역변수 등 공통으로 들어가는 로직을 추가할 수 있다.
Manifest 쪽에도 추가해주자
...
<application
android:name=".NetworkApplication"
android:allowBackup="true"
....
4. Activity 에 의존성 추가
mainViewModel 이라는 model을 만들어서 MainActivity에 의존성주입해보자
package com.example.network_sample.model
import androidx.lifecycle.ViewModel
class MainViewModel : ViewModel() {
}
해당 클래스를 의존성주입하려면 2가지 방법이 있다.
방법 1. @Inject 사용
직접 구현한 클래스에 사용가능하다
방법 2. @Module 사용
인터페이스, 추상 클래스, 직접 구현불가한 클래스 에 사용 가능하다.
위 클래스들은 @Inject 사용이 불가하므로 @Module 사용한다.
나는 직접구현한 클래스이므로, @Inject를 사용하겠다.
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject
lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
DI를 성공적으로 진행하기위해서, MainActivity에 @AndroidEntryPoint 어노테이션을 붙여준다.
@AndroidEntryPoint란?
Hilt가 애플리케이션의 컴포넌트를 생성/주입할수있게된다.
안쓰면?
해당 클래스를 주입 가능한 대상으로 인식하지 않아서 필드에 의존성을 주입할 수 없다.
아래 유형에서 @AndroidEntryPoint 사용가능하다
(Application, Activity, Fragment, service, View, BroadcastReceiver, ViewModel)
github주소
- showDog 프로젝트
'Mobile > Android' 카테고리의 다른 글
Kotlin - Android Hilt 사용하여 앱 개발하기 (3) - 데이터 바인딩 (0) | 2024.03.29 |
---|---|
Kotlin - Android Hilt 사용하여 앱 개발하기 (2) - Network 통신 (0) | 2024.03.28 |
Kotlin - Android 앱 개발하기 (5) - GNB 영역 추가 (0) | 2024.03.07 |
Kotlin - Android 앱 개발하기 (4) - 타이틀 바 추가 (0) | 2024.03.05 |
Kotlin - Android 앱 개발하기 (3) - splash 추가 (0) | 2024.02.26 |