-Hilt란 안드로이드에서 사용할 수 있는 표준적인 DI 솔루션을 제공해준다.
-Dagger2 기반으로 위에 Layer를 하나 더 쌓아서 만든 라이브러리이다.
-Hilt 이전에는 수동으로 의존성을 주입하거나 개인 또는 회사에서 만든 개별적인 라이브러리를 사용하거나 Dagger를 사용하였다.
-Guice -> Dagger2 -> Kotin -> Hilt 이런식으로 DI의 발전이 진행되어 왔다.
-자바를 위한 의존성 주입
-리플렉션 기반이기 때문에 앱의 수행능력이 저하되는 단점이 존재한다.
-자바를 위한 의존성 주입
-코틀링을 위한 의존성 주입
-리플렉션 기반이기 때문에 앱의 수행능력이 저하되는 단점이 존재한다.
-2020년 6월 드디어 Hilt가 최초로 출시되었다.
-안드로이드에서만 사용할 수 있고 Dagger2를 기반으로 사용하고 있다.
-어노테이션 처리 기반으로 코드생성을 하지 않기 때문에 의존성 그래프 체크를 런타임에 하게 되기 때문에 런타임에 충돌이 발생할 수 있어서 오류가 발생하면 앱이 죽어버릴 수 있다.
-리플렉션 기반이기 때문에 앱의 수행능력이 떨어진다.
-앱의 규모가 커지면 앱의 의존성 그래프를 파악하기가 어렵다.
-어노테이션 프로세서를 통해서 코드를 자동으로 생성해서 컴파일 단에서 오류를 체크 할 수 있다.
-학습 진입장벽이 높아서 너무 어려워
-자유도가 높아서 문제 해결에 있어서 너무 다양한 방법들이 존재한다. 어느 정도의 규격은 있어야 하는데 자유롭다보니 협업이 불편하다.
-컴파일 단에서 의존성 주입 코드를 검증하기 때문에 앱의 런타임 안정성이 높다.
-불필요한 객체 생성을 중리고 자원의 사용을 최적화 할 수 있으므로 앱의 수행능력이 높다.
-어노테이션을 사용해서 의존성을 자동으로 주입해주기 때문에 의존성을 관리하가기 편하다.
-표준 컴포넌트를 제공하기 때문에 표준화된(어느정도의 규격이 존재하는) 의존성 주입 방법을 사용한다.
-즉, 높은 자유도가 있는 것이 아니라 Hilt에서 자체적으로 정해준 의존성 주입 규약을 통해서 의존성을 주입하기 때문에 다른 개발자들이 의존성을 주입하였다고 하더라고 쉽게 알아 볼 수 있기 때문에 협업에 용이하다.
-Hilt에서 제공하는 ViewModel.Factory를 통해서 ViewModel을 더 확장할 필요가 없다.
-Hilt가 제공해주는 테스트용 컴포넌트를 사용하면 불필요한 코드20%~30%를 줄일 수 있다.
-표준 컴포넌트 사용만 권장하기 때문에 별도의 컴포넌트를 정의할 필요가 없다.
-Viewmodel , Navigation , WorkManager 등과 함께 통합사용이 쉽다.
-Hilt가 Test 전용 Annotation을 제공해주기 때문에 테스트가 쉽다.
-위 어노테이션이 적용된 테스트 클래스는 Hilt가 관리하는 의존성을 테스트 내부에서 자동으로 주입받을 수 있다.
-테스트에서 특정한 HiltModule을 사용하지 않도록 설정 할 때 사용하는데 이는 테스트에 적합한 상황을 만들기 위해 사용하는 것이다.
-단위 테스트에서 의존성을 주입하는데 사용한다.
-Hilt를 사용하여 테스트에서 커스텀 애플리케이션 클래스를 사용하고자 할 때 사용되는 어노테이션이다.