힐트를 사용하면, 모든 Android 클래스에 컨테이너를 제공한다. 이런 컨테이너들의 수명주기도 자동 관리해준다고 함.

솔리드 5원칙 중 의존역전 원칙을 지켜서 개방폐쇄 원칙을 따르기 위한 방법이다.

기존의 대거2는 사용하기 어려웠다고 한다. 때문에 Koin 이라는 외부 라이브러리를 사용한 사람들도 있었다. 하지만 이것은 엄밀히 말하면 DI가 아니다. Kotlin의 DSL을 활용한 Service Locator Pattern에 가깝다고 한다. 때문에 컴파일 타임이 아니라 런타임 시간에 주입되기 때문에 성능상 떨어진다.

Dagger Hilt는 2020년 6월 Google에서 오피셜하게 발표한 Android 전용 DI 라이브러리

Hilt는 Dagger2를 기반으로 Android Framework에서 표준적으로 사용되는 DI component와 scope를 기본적으로 제공하여, 초기 DI 환경 구축 비용을 크게 절감.

기존에 불가피하게 작성해야 했던 보일러 플레이트를 대량 줄이고 프로젝트의 전반적인 readability를 향상함.

또한, Jetpack의 ViewModel에 대한 의존성 주입도 별도의 큰 비용 없이 구현할 수 있습니다.

스크린샷 2023-04-05 오후 5.05.21.png

힐트를 직접 사용해보자

@HiltAndroidApp  어노테이션을 사용하여 컴파일 타임 시 표준 컴포넌트 빌딩에 필요한 클래스들(애플리케이션 수준 종속 항목 컨테이너를 비록한 힐트의 코드들)을 초기화한다.

Applicationclass를 상속받고 있는 클래스에 해당 어노테이션을 설정해주면 된다.

이게 있어야, 즉, 이걸로 애플리케이션 수준에 필요한 컨테이너들이 초기화되어있어야, @AndoridEntryPoint 주석이 있는 Android클래스들에 종속 항목 제공이 가능해진다고 함.

그렇다면, 힐트에서 제공하는 Android클래스들에는 뭐가 있을까?

⇒ 여기에서 애플리케이션과 뷰모델을 제외하고는 @AndroidEntryPoint를 사용하는 듯함.