728x90
반응형
Hilt 는 Google 에서 오피셜로 발표한 안드로이드 DI 라이브러리 입니다.
Dagger2 기반의 DI 라이브러리이며 모든 Android 클래스에 컨테이너를 제공하고 수명주기를 자동으로 관리함으로써 애플리케이션에서 DI 를 사용하는 표준을 제공합니다.
이번 포스팅에서 간단하게 구현할 수 있는 방법을 소개합니다.
build.gradle (Module)
plugins {
.
.
.
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}
dependencies {
.
.
.
implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
implementation "androidx.hilt:hilt-compiler:$hilt_compiler_version"
implementation "androidx.hilt:hilt-navigation-compose:$hilt_nav_compose_version"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:$hilt_view_model_version"
}
build.gradle (Project)
buildscript {
ext {
.
.
.
hilt_version = '2.38.1'
hilt_android_compiler_version = '2.37'
hilt_view_model_version = '1.0.0-alpha03'
hilt_compiler_version = '1.0.0'
hilt_nav_compose_version = '1.0.0'
}
}
settings.gradle
pluginManagement {
.
.
.
resolutionStrategy {
eachPlugin {
if( requested.id.id == 'dagger.hilt.android.plugin') {
useModule("com.google.dagger:hilt-android-gradle-plugin:2.38.1")
}
}
}
}
SampleApplication.kt
- Application 을 상속 받는 클래스를 만들어주고 @HiltAndroidApp 어노테이션을 붙여줍니다.
import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class SampleApplication : Application()
AndroidManifest.xml
- application 태그 내부에 android:name=".SampleApplication" 을 넣어줍니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest
.
.
<application
// 추가
android:name=".SampleApplication"
.
.
.
>
<activity
android:name=".MainActivity"
.
.
.
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.kt
- 사용할 화면에 @AndroidEntryPoint 어노테이션을 적어줍니다.
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Hilt_sampleTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
SampleScreen()
}
}
}
}
}
SampleModule.kt
- Retrofit 이나 Room 같은 라이브러리들은 Provide를 이용해서 DI 를 제공할 수 있습니다.
- object 클래스에는 @Module @InstallIn(SingletonComponent::class) 어노테이션을 적어줍니다.
- @Provides @Singleton 으로 제공할 클래스를 넣습니다.
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object SampleModule {
@Provides
@Singleton
fun provideSampleService() = SampleService()
}
SampleViewModel.kt
- Hilt 를 적용할 ViewModel 클래스에 @HiltViewModel @Inject 어노테이션을 적어줍니다.
- 그리고 constructor 내부에 DI 에 올린 클래스를 넣어주면 끝
@HiltViewModel
class SampleViewModel @Inject constructor(
private val service: SampleService
) : ViewModel() {
.
.
.
}
SampleScreen.kt
- 화면에서 ViewModel 주입은 = hiltViewModel() 으로 할 수 있습니다.
@Composable
fun SampleScreen(
viewModel: SampleViewModel = hiltViewModel()
) {
.
.
.
}
- 샘플코드 첨부합니다.
728x90
반응형