이전 포스팅에서는 Dagger2를 무작정 따라 써 보는 방법에 대해 알려드렸습니다.
이번엔 엄청난 Hilt(이하 힐트)를 무작정 따라 써 볼 수 있게 해드리겠습니다.
이 예제 역시 간단하게 파일 목록 조회와, 해당 파일명의 랜덤 아이디를 부여하는걸로 작성되었습니다.
우선 gradle 설정이 필요합니다.
[프로젝트 단위]
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
[앱 단위]
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
...
dependencies {
...
implementation 'com.google.dagger:hilt-android:2.28-alpha'
kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha'
...
}
이제 gradle 설정은 끝났습니다.
이후 모델과 모듈 설정이 필요합니다.
모델과 모듈 설정은 이전 포스팅과 동일합니다.
[모델]
data class FileDataModel (var data: String)
[모듈]
@Module
@InstallIn(ApplicationComponent::class)
class FileModule {
@Provides
@Named("name")
fun provideFileName(): ArrayList<FileDataModel> {
val array = ArrayList<FileDataModel>()
val files = File("/sdcard").list().map {
val file = File(it)
array.add(FileDataModel(file.name))
}
return array
}
@Provides
@Named("random")
fun provideRandom(): ArrayList<FileDataModel> {
val array = ArrayList<FileDataModel>()
val files = File("/sdcard").list().map {
val file = File(it)
array.add(FileDataModel(Random.nextInt(0, 10000).toString()))
}
return array
}
}
이 때 @InstallIn 이라는 새로운 어노테이션이 생겼습니다.
이 어노테이션에 쓰인 값은 힐트에서 지원하는 클레스 입니다.
이 어노테이션을 작성하여, 힐트가 사용할 모듈을 정의합니다.
힐트는 Dagger2(이하 대거)와는 달리 컴포너트를 따로 만들어 줄 필요가 없습니다. (!)
이제 모델과 모듈 설정은 끝났습니다.
이제 Application을 상속하는 새로운 클레스를 만들어야 합니다.
@HiltAndroidApp
class MyApplication : Application() {}
매우 간단하게 이렇게 만들어주면 됩니다.
마지막으로 Manifest 설정이 필요합니다.
<application
...
android:name=".activity.MyApplication"
... />
android:name="Application 상속 클래스 위치"
이거까지 추가해주면 힐트를 사용하기 위한 모든 준비가 끝났습니다!
이제 힐트를 써봅시다.
@AndroidEntryPoint
class MainActivity : AppCompatActivity(R.layout.activity_main) {
@Inject
@Named("name")
lateinit var fileData: ArrayList<FileDataModel>
@Inject
@Named("random")
lateinit var fileData2: ArrayList<FileDataModel>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
for(i in 0 until fileData.size){
Log.d(fileData[i].data, fileData2[i].data)
}
}
}
@AndroidEntryPoint 어노테이션을 사용하여, 힐트를 통한 의존성 주입이 사용된다고 정의합니다.
그리고 힐트는 대거와는 달리 Dagger~~~.inject(this) 메소드가 따로 필요하지 않습니다. (!!!!)
super.onCreate(~~~)가 호출될 때, 자동으로 의존성 주입이 시작됩니다. (!!!!!!!!!!!!!!!)
위 소스의 결과는 다음과 같습니다.
해당 포스트에 쓰인 예제는 깃허브에 올려두었습니다.
'Android' 카테고리의 다른 글
[Dagger2/Kotlin] 안드로이드 Dagger2 무작정 써보기 (0) | 2020.07.10 |
---|---|
안드로이드 Context의 종류 (0) | 2020.06.25 |