의존성 주입을 알아보기전에, 의존성이란 무엇인지 알아야한다.
클래스간에 의존성이 있다는 것은 클래스간에 의존 관계가 있다는 것을 의미한다.
→ 의존 관계가 있다는 것은 한 클래스가 바뀔 때 다른 클래스가 영향을 받는다
를 의미한다.
인터페이스를 통해서 클래스에 대한 의존성을 해결할 수 있다.
클래스 외부에서 객체를 생성하여 해당 객체를 클래스 내부에 주입하는 것.
A Class 내부에서 B Class가 인스턴스화 된다면 이를 A가 B에 강하게 결합되어 있다
고 한다.
class A {
val b: B = B()
}
class B {
...
}
이렇게 강하게 결합되어 있을 경우 관리하기가 어렵다. 만약 B 클래스를 A클래스에서 많이 사용한다고 가정하고 B클래스를 C클래스로 수정해야한다면 사용한 횟수만큼 수정이 필요하다. 이를 해결하기 위해 주입
을 사용한다.
class A(private val b: B)
주입을 통해서 B객체의 대한 제어 권한이 더이상 A가 아닌 외부에있다. → IOC 이렇게 구조를 바꾼다면 외부에서 주입 받는 로직을 수행하는 것 외에는 신경쓸 필요가 없다. 또한 여러개의 인스턴스를 만들지 않고 주입받은 인스턴스를 사용하는 것이 메모리, 관리 측에서도 편하다.
Hilt는 구글에서 개발한 의존성 주입 라이브러리로, 모든 상용구를 생성하여 DI 모범 사례를 최대한 활용할 수 있도록 도와주는 Jetpack이 권장하는 의존성 주입 솔루션이고, 기타 Jetpack 라이브러리 지원과 함께 제공된다. 안드로이드 앱에서 종속성 주입 원칙을 따르면 좋은 앱 아키텍처의 토대를 마련할 수 있다. → 좋은 아키텍처 토대란?