Dagger를 도와줄 Hilt라이브러리가 출시되었다 (아직 Alpha단계)

https://proandroiddev.com/hilt-first-impressions-31f55cf57b3f

위의 아티클을 읽고 느낀 Hilt의 장단점을 정리해보았다.

힐트의 장점

  • 힐트는 선택적으로 적용하는 라이브러리, Dagger 조작에 제한을 두지만 많은 보일러플레이트 코드를 제거할 수 있음
  • 힐트는 컴포넌트 정의 필요 없음. 이미 정의된 컴포넌트 사용. 대신에 @InstallIn과 @HiltAndroidApp 어노테이션 사용
  • 모듈에 @InstallIn을 추가적으로 더하고 어느 컴포넌트에 의존할 것인지 명시
  • 애플리케이션 클래스에 @HiltAndroidApp 추가
  • 컴포넌트가 모듈에 의존하는 대신 모듈이 컴포넌트에 의존하는 구조로 바꿈, 모듈이 정확히 어디서 사용되는지 알기 위함
  • 기존 @Module, @Binds, @Provides와 같은 어노테이션은 그대로 쓰임
  • 힐트는 바이트 코드를 조작함. 만약 @HiltAndroidApp 애노테이션을 MyApplication : BaseApplication() 클래스에 적용하면 Hilt_MyApplication클래스가 생성됨 하지만 상속구조는 다음과 같음 class MyApplication : Hilt_MyApplication() : BaseApplication() 그러므로 인젝션 코드가 필요 없음.
  • @ContributesAndroidInjector 대신 @AndroidEntryPoint를 사용하면 서브컴포넌트 생성을 도와줌
  • @AndroidEntryPoint를 사용하면 액티비티, 프레그먼트, 서비스, 브로드캐스트 리시버 또는 뷰까지 힐트와 호환되어 의존성 주입받는게 가능
  • 다음과 같은 컴포넌트를 사용 활 수 있다.
    ApplicationComponent(브로드캐스트 리시버도 이 컴포넌트 사용)
    ActivityRetainedComponent
    ActivityComponent
    FragmentComponet
    ViewComponent
    ViewWithFragmentComponent
    ServiceComponent

힐트의 단점

  • 기존 프로젝트에 힐트를 적용하려면 마이그래이션 필요
  • 범용적인 서브컴포넌트를 사용하다보니 모듈에서 @Named같은 @Qualifier로 의존성 주입 타겟을 명확히 해야할 필요가 있음.
  • NestedFragment의 Subcomponent 미지원
카테고리: 미분류

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.