한국어로 '의존성 주입'이라는 뜻이다.
외부에서 의존객체를 생성하여 넘겨준다고 생각하면 된다.
의존성은 무엇일까?
예를 들어 자동차를 만든다고 하자
자동차에는 달리기 위한 기능이 있으니 다음처럼 차를 만들었다하자
class Car() {
fun run(){
}
}
하지만 자동차를 움직이기 위해서는 엔진으로부터 동력을 얻어야 할것이다.
엔진을 만들어보고, run시 engine을 가동시키자.
class Engine() {
}
class Car(){
private val engine = Engine()
fun run() {
engine.start()
}
}
이런 상황에서 Car는 run을 하기위해 Engine이 무조건 필요하게 되므로 Car은 Engine에 의존적이게 된다.
의존성이 생긴다면 코드의 재활용성이 떨어진다
engine에서 변화가 생겨 수정할 경우 Car에서도 수정해야할 상황이 생기게 된다.
예를 들어 engine이 아니라 superEngine을 넣는다고 하면 Car의 engine = SuperEngine()으로 수정해야겠지만,
다음과 같이 Car의 초기화시 engine을 가져오게 된다면, 그럴 필요가 없겠지~
class Engine() {
}
class SuperEngine() : Engine() {
}
class Car(private val engine:Engine){
fun run() {
engine.start()
}
}
항상 생각하지만 공식문서가 짱이다. 한번씩 읽어보기를 ...
buildscript {
ext {
hilt_version = "2.43.2"
kotlin_version = "1.7.10"
}
dependencies {
classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
plugin {
...
}
plugins {
...
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}
...
...
...
dependencies {
...
// Hilt
implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
// viewmodel scope 사용
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
// liveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"
// by viewmodels
implementation 'androidx.activity:activity-ktx:1.5.1'
implementation 'androidx.fragment:fragment-ktx:1.5.2'
}
// Allow references to generated code
kapt {
correctErrorTypes = true
}
필요한 dependencies를 implementataion 해주면된다.
Hilt를 쓰면서 viewmodel도 같이 사용할 예정이라 필요한 것도 같이 implementation 시켰다.
다음에는 Hilt에 대하여 설명해 보도록하겠다.