DI (Dependency Injection)

4741 단어 androiddiandroid

의존성이 뭐예요?

개발을 하다 보면 코드에 의존성이 생기고는 해요.
예를 들면 아래 코드에서 StartProgramming() 클래스의 programming 변수가 호출되기 위해서는 Programmer() 클래스가 필요해요. 그럼 이것을 Programmer 클래스가 StartProgramming 클래스의 의존성을 가진다라고 해요.


class StartProgramming() {
	var programming = "일단 커피부터 !"
}

class Programmer() {
	var start = StartProgramming()
}

fun main() {
	val programmer = Programmer()
	println(programmer.start.programming) 
}

문제점

  • 코드의 재활용성이 떨어져요.
  • StartProgramming 클래스가 수정될 때 Programmer 클래스도 함께 수정해 줘야 해요.

정리

객체가 서로 의존하게 되면 결합도가 높아져서 코드의 유지 보수가 힘들어져요.


DI(의존성 주입)을 하면 문제점을 해결할 수 있어?

  • 객체 간의 의존성을 줄이거나 없앨 수 있어요.
  • 코드의 유지 보수가 쉬워져요.
  • 코드의 재활용성이 높아져요.
  • 유닛 테스트가 쉬워져요.

방법

필요한 객체를 직접 생성하는 것이 아닌, 외부에서 생성해서 넣어줌으로써 객체 간의 결합도를 줄이고 좀 더 유연한 코드를 작성할 수 있어요.
즉, 한 클래스를 수정하였을 때 다른 클래스도 수정해야 하는 상황을 막아줄 수 있어요.

class Programmer {
	var programming = ""
    
	fun startProgramming(programming: String){
		println(programming)
	}
}

fun main() {
	val programmer = Programmer()
	programmer.startProgramming("일단 커피부터 !")
}

정리

객체를 직접 생성하지 않고 외부에서 생성해 넣어줌으로써 결합도를 줄이고 좀 더 유연한 코드를 작성할 수 있어요.


DI 라이브러리가 있어요? (Dagger Hilt)

객체를 외부에서 주입하기 위해서는 생명 주기 관리가 필요해요. 이를 전반적으로 관리해주는 대표적인 오픈소스 라이브러리로 Dagger2가 있어요. 자체적으로 Android와 크게 상관관계가 없지만 Android 환경에서 많은 인기를 끌었고 Goggle은 Dagger-Android도 함께 지원해 주었는데요.

Google은 안드로이드 개발자들의 Dagger와 Koin을 비교한 피드백을 수렴하여 Dagger-Android 보다 초기 구축 비용을 훨씬 절감시킬 수 있고 Android Framework에서 더 강력함을 발휘할 수 있는 Dagger Hilt를 발표했어요.

정리

Dagger Hilt는 의존성 주입을 위해 사용하는 Android Jetpack의 라이브러리로 자동으로 수명주기를 관리해요.

출처&참고

[DI] Dependency Injection이란 무엇일까?
Dagger Hilt로 안드로이드 의존성 주입 시작하기

좋은 웹페이지 즐겨찾기