Hilt를 이용한 DI(의존성 주입) 방법 (1)

WonDDak·2022년 9월 24일
0

Hilt

목록 보기
1/2

Dependency Injection(DI)

한국어로 '의존성 주입'이라는 뜻이다.
외부에서 의존객체를 생성하여 넘겨준다고 생각하면 된다.

Dependency

의존성은 무엇일까?

예를 들어 자동차를 만든다고 하자
자동차에는 달리기 위한 기능이 있으니 다음처럼 차를 만들었다하자

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()
    }
}

그래서 왜?

  • 코드의 재활용성이 늘어난다.
  • 객체 간의 의존성을 줄일수 있다.
    라고 정리할수있겠다.

HILT 사용해보기

항상 생각하지만 공식문서가 짱이다. 한번씩 읽어보기를 ...

gradle Setting

  1. project 단위 gradle에 다음을 추가해 주자
    최신 버전 프로젝트를 생성하면 buildscript 구문은 없으므로 직접 작성해 주면된다.
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 {
	...
}
  1. app 단위
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에 대하여 설명해 보도록하겠다.

profile
안녕하세요. 원딱입니다.

0개의 댓글