[안드로이드스튜디오_문화][Hilt 기초]

기말 지하기포·2024년 1월 13일
0

Hilt

-Hilt란 안드로이드에서 사용할 수 있는 표준적인 DI 솔루션을 제공해준다.

-Dagger2 기반으로 위에 Layer를 하나 더 쌓아서 만든 라이브러리이다.

Hilt의 등장 배경

-Hilt 이전에는 수동으로 의존성을 주입하거나 개인 또는 회사에서 만든 개별적인 라이브러리를 사용하거나 Dagger를 사용하였다.

-Guice -> Dagger2 -> Kotin -> Hilt 이런식으로 DI의 발전이 진행되어 왔다.

Hilt 이전의 DI

Guice

-자바를 위한 의존성 주입

-리플렉션 기반이기 때문에 앱의 수행능력이 저하되는 단점이 존재한다.

Dagger2

-자바를 위한 의존성 주입

Koin

-코틀링을 위한 의존성 주입

-리플렉션 기반이기 때문에 앱의 수행능력이 저하되는 단점이 존재한다.

Hilt

-2020년 6월 드디어 Hilt가 최초로 출시되었다.

-안드로이드에서만 사용할 수 있고 Dagger2를 기반으로 사용하고 있다.

Koin Vs Dagger2 Vs Hilt

Koin

-어노테이션 처리 기반으로 코드생성을 하지 않기 때문에 의존성 그래프 체크를 런타임에 하게 되기 때문에 런타임에 충돌이 발생할 수 있어서 오류가 발생하면 앱이 죽어버릴 수 있다.

-리플렉션 기반이기 때문에 앱의 수행능력이 떨어진다.

-앱의 규모가 커지면 앱의 의존성 그래프를 파악하기가 어렵다.

Dagger2

-어노테이션 프로세서를 통해서 코드를 자동으로 생성해서 컴파일 단에서 오류를 체크 할 수 있다.

-학습 진입장벽이 높아서 너무 어려워

-자유도가 높아서 문제 해결에 있어서 너무 다양한 방법들이 존재한다. 어느 정도의 규격은 있어야 하는데 자유롭다보니 협업이 불편하다.

Hilt

-컴파일 단에서 의존성 주입 코드를 검증하기 때문에 앱의 런타임 안정성이 높다.

-불필요한 객체 생성을 중리고 자원의 사용을 최적화 할 수 있으므로 앱의 수행능력이 높다.

-어노테이션을 사용해서 의존성을 자동으로 주입해주기 때문에 의존성을 관리하가기 편하다.

Hilt 장점

표준 컴포넌트를 제공한다.

-표준 컴포넌트를 제공하기 때문에 표준화된(어느정도의 규격이 존재하는) 의존성 주입 방법을 사용한다.

-즉, 높은 자유도가 있는 것이 아니라 Hilt에서 자체적으로 정해준 의존성 주입 규약을 통해서 의존성을 주입하기 때문에 다른 개발자들이 의존성을 주입하였다고 하더라고 쉽게 알아 볼 수 있기 때문에 협업에 용이하다.

보일러플레이트가 감소한다.

-Hilt에서 제공하는 ViewModel.Factory를 통해서 ViewModel을 더 확장할 필요가 없다.

-Hilt가 제공해주는 테스트용 컴포넌트를 사용하면 불필요한 코드20%~30%를 줄일 수 있다.

-표준 컴포넌트 사용만 권장하기 때문에 별도의 컴포넌트를 정의할 필요가 없다.

Jetpack과 함께 사용하는 것이 용이하다.

-Viewmodel , Navigation , WorkManager 등과 함께 통합사용이 쉽다.

테스트가 쉽다.

-Hilt가 Test 전용 Annotation을 제공해주기 때문에 테스트가 쉽다.

@HiltAndroidTest

-위 어노테이션이 적용된 테스트 클래스는 Hilt가 관리하는 의존성을 테스트 내부에서 자동으로 주입받을 수 있다.

@UninstallModules

-테스트에서 특정한 HiltModule을 사용하지 않도록 설정 할 때 사용하는데 이는 테스트에 적합한 상황을 만들기 위해 사용하는 것이다.

@BindValue

-단위 테스트에서 의존성을 주입하는데 사용한다.

@CustomTestApplication

-Hilt를 사용하여 테스트에서 커스텀 애플리케이션 클래스를 사용하고자 할 때 사용되는 어노테이션이다.

profile
포기하지 말기

0개의 댓글