Hilt사용법 - DI(Dependency Injection)

quinones·2024년 5월 13일

오늘은 Hilt를 이용한 의존성 주입 방법을 공부해봤다.

의존성

의존성이란? -> 하나의 코드가 다른 코드에 의존하는 상태.

class A{
	new b = newB()
}

class B{
}

여기서 클래스 A는 클래스 B를 사용하기 때문에 A는 B에 의존적이다.

DI사용 이유

의존성이 감소한다 - 변화에 강함, 재사용성이 좋아짐, 유지보수 용이
코드양 감소
테스트 용이

위와같은 장점들이 있어서 의존성을 주입한다.

Hilt사용법

나는 build.gradle.kts를 사용중이다.

라이브러리 추가

Project수준에서

plugins{
	id("com.google.dagger.hilt.android") version "2.49" apply false
}

그리고 Module수준에서

plugins{
	id ("kotlin-kapt")
    id ("com.google.dagger.hilt.android")
}
..
dependencies {
	implementation ("com.google.dagger:hilt-android:2.49")
    kapt ("com.google.dagger:hilt-android-compiler:2.49")
}

Hilt설정 추가

@HiltAndroidApp
class MyApplication : Application() {
}

애플리케이션 클래스에 Hilt설정을 추가해준다. 애플리케이션 클래스를 만들거나 기존의 애플리케이션 클래스를 열어 위와같이 수정해준다.

의존성을 주입할 클래스 생성

class Car @Inject constructor() {
    fun buttonClicked(){
        Log.d("DIchecking", "Car Button Clicked")
    }
}

예를 들어 Car클래스를 만들고 의존성 주입을 받을 필드를 추가해준다.

주입받은 클래스 사용

먼저 화면은 버튼하나로 구성했다. 버튼의 id는 button이다.

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject lateinit var car: Car

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val button = findViewById<Button>(R.id.button)
        button.setOnClickListener { car.buttonClicked() }
    }
}

manifest

<application
        android:name=".MyApplication"

Hilt설정을 추가할때 새롭게 애플리케이션을 만들었다면 manifest에서 android:name을 해당 클래스의 이름으로 설정해준다.

실행

모든 구성 완료후 실행을 누르면 Log창에 Car Button Clicked이 성공적으로 나올 것이다.

profile
이우진

0개의 댓글