Dagger Hilt

Dependency Injection이란?

Dependency Injection

Dependency Injection in Android

의존성 주입은 최근 안드로이드 개발환경에 있어서 가장 주목받는 디자인패턴 중 하나이다. 각종 컴포넌트 간 의존성이 상당히 강한 안드로이드 프레임 워크에서 클래스간 의존도를 낮추는 것은 매우 중요하다.

인스턴스를 클래스 외부에서 주입하기 위해서 인스턴스에 대한 전반적인 생명주기의 관리가 필요하다. 프로젝트의 규모가 커질수록 의존성 인스턴스들을 일일히 관리하는 것은 많은 리소스를 필요로 한다. 그래서 이를 전반적으로 관리하기 위해 Google이 주도적으로 밀어주는 Dagger2 를 사용했었다.

Dagger는 안드로이드와 크게 상관관계가 없지만 인기를 끌고 사용되었고 보일러 플레이트를 줄여주는 Dagger-Android도 함께 지원주었다. 하지만 Dagger는 높은 러닝커브를 가지며 초기 DI 환경을 구축하는데 오히려 매뉴얼한 방법보다 리소스가 많이 들 수 있다. 이러한 이유로 Kotlin 언어적 특성을 활용하여 러닝커브가 상대적으로 낮은 Koin 또한 많은 인기를 얻고 있다.

Koin은 사용이 간결하지만 엄밀하게 DI와는 다른 개념이며, 결과적으로 프로젝트의 규모가 커질 수록 컴파일 타임에 많은 일을 처리하는 Dagger에 비해 런타임 퍼포먼스가 떨어진다고 한다. 이에 Google은 Dagger-Android 보다 초기 구축 비용을 훨씬 절감시키고, 안드로이드 프레임워크 환경에서 강력한 Dagger Hilt를 발표하게 되었다.

Dagger Hilt

Hilt는 2020년 6월 구글에서 발표한 안드로이드 전용 DI 라이브러리이다. Dagger2 기반으로 안드로이드 프레임워크에서 표준적으로 사용되는 DI 컴포넌트와 scope를 기본적으로 제공하여, 초기 DI 구축 비용을 절감한다. 이에 따라 보일러 플레이트를 대폭 줄이고 가독성과 유지보수 면에서 이득을 취할 수 있다. 또한 Jetpack의 ViewModel에 대한 DI도 큰 비용없이 구현가능하다.