Android 공부/DI ( 의존성 주입 )

Hilt ?

Machine_웅 2022. 5. 16. 15:47
728x90
반응형

의존성 주입 

 

https://www.youtube.com/watch?v=gkUCs6YWzEY

 

https://developer.android.com/training/dependency-injection/hilt-android?hl=ko

 

Hilt를 사용한 종속 항목 삽입  |  Android 개발자  |  Android Developers

Hilt를 사용한 종속 항목 삽입 Hilt는 프로젝트에서 수동 종속 항목 삽입을 실행하는 상용구를 줄이는 Android용 종속 항목 삽입 라이브러리입니다. 수동 종속 항목 삽입을 실행하려면 모든 클래스

developer.android.com

 

https://developer.android.com/codelabs/android-hilt?hl=ko#0 

 

Android 앱에서 Hilt 사용  |  Android 개발자  |  Android Developers

이 Codelab에서는 Hilt를 사용하여 종속 항목 삽입을 실행하는 Android 앱을 빌드해 보겠습니다.

developer.android.com

 

의존성 주입이란?

생성자 또는 메서드 등을 통해 외부로부터 생성된 객체를 전달 받는 것

 

특징

  • 인터페이스를 사용하여 클래스간 결합도를 느슨하게 함.
  • Stub 또는 Mock 객체를 사용하여 단위테스트 하기가 더욱 쉬워짐

 

 

 

 

Dagger2 자바와 안드로이드를 위한 빠른 의존성 주입 프레임워크

  • 컴파일 타임시 의존성주입에 관련된 소스를 생성
  • 자원 공유의 단순화
  • 작은 라이브러리 크기 
  • 74퍼센트가 대거를 사용 함.

 

단점

 - 배우기 어렵고, 프로젝트 설정이 어렵다.

 - 간단한 프로그램을 만들때는 번거롭다.

 

 

의존성 주입 프레임워크의 궁극적인 목표

  • 정확한 사용방법을 제안
  • 쉬운 설정 방법  ( Koin 라이브러리가 설정이 쉬움 )
  • 중요한 것들에 집중할 수 있도록 함 

 

————————————————————————————————

 

Hilt 는 애플리케이션에서 Di 사용하는 표준적인 방법을 제공

 

 

 

 

 

Hilt 특징

  • Dagger2 기반
  • 표준화된 Dagger2 사용법 제시
  • 보일러플레이트 코드 간소화
  • 프로젝트 설정 간소화
  • 개선된 테스트 환경 
  • AndroidX 라이브러리의 호환

 

Hilt 개발자가 직접 작성해야하는 ServiceLocator 같은 코드를 자동으로 생성하여

 Android 앱에 보일러플레이트 코드를 제거한다. 

 

 

 

어노테이션

@Inject 

 -  의존성 주입을 받겠다는 것을 의미  ( 인스턴스를 제공 ) 

 -  인스턴스를 제공하는 방법을 알려주는 것을 바인딩(binding)
 -  @Inject 이용하면 인스턴스들을 주입  있다.

 -  @Inject 어노테이션이 붙은 필드들에 인스턴스가 주입된다. 

@HiltAndroidApp - Hilt의 코드 생성을 트리거합니다. ( 모든 의존성 주입의 시작점 )

 - @HiltAndroidApp은 앱이 의존성 주입을 가능하도록 Hilt가 코드를 생성하게 하는 트리거이다.
 - 이 어노테이션이 붙은 클래스를 어플리케이션 컨테이너(Application container)라고 한다.

( @HiltAndroidApp의 설정후 사용가능 )

( Acitivity , Fragmanet , View, Service, BroadcastReceiver 만 지원 )

 

 

Hilt 모듈에 인터페이스와 같이 생성자로 인스턴스를 생성할 수 없는 바인딩 유형을 Hilt 모듈에 추가한다.

Hilt 모듈은 @Module과 @InstallIn 어노테이션이 추가된 모듈이다.

 

@Module은 Hilt가 모듈임을 알려주고

@InstallIn은 어떤 컨테이너에서 Hilt를 이용해 어떤 안드로이드 컴포넌트와 바인딩을 할 수 있는지 Hilt에 알려준다. 

 

 

@InstallIn

  - 해당모듈이 어떤 컴포넌트에 설치될것인지 명시,

  - ( @Module 클래스에 @InstallIn 이 없으면 컴파일 에러 )

  -  Hilt 모듈은 @Module과 @InstallIn 어노테이션이 추가된 모듈이다.

  -  @Module은 Hilt가 모듈임을 알려주고 @InstallIn은 어떤 컨테이너에서 Hilt를 이용해 

       어떤 안드로이드 컴포넌트와 바인딩을 할 수 있는지 Hilt에 알려준다. 

@Provides 로 인스턴스 제공 

      - 인터페이스 타입에 대한 인스턴스 제공은 @Provide 어노테이션을 달아

         Hilt에 생성자가 삽입될 수 없는 타입이란걸 알려줄 수 있다. 

     -  @Provides 어노테이션이 있는 함수의 구현은 Hilt에서  타입의 인스턴스를 제공해야할 때마다 실행된다. 



 

@EntryPoint

  - Hilt가 지원하지 않는  클래스에서 의존성이 필요한 경우 사용

  ( 예 -ContentProvider, DFM, Dagger를 사용하지 않는 서드파티 라이브러리)

  - 인터페이스에서만 사용, @InstallIn 이 반드시 함께 있어야함,

     EntryPoints 클래스의 정적 메서드를 통해 그래프에 접근 

 

@AndroidEntryPoint 

  - @AndroidEntryPoint사용하면Android Lifecycle따르는의존성컨테이너를생성한다. 
  -@AndroidEntryPoint를 사용하면 Hilt는 Activity / Fragment의 수명 주기에 연결된

     종속 컨테이너(Dependency container)를 생성하고 해당 클래스 ( Activity / Fragment ) 에 인스턴스들을 주입한다. 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

다른 컴포넌트를 참고 할수 있도록 스코프를 부여

( 동일 인스턴스 공유, 자원공유  )

 

 

 

 

 

 

 

 

컨테이너

컨테이너는 참조가 필요한 클래스의 인스턴스들을 생성해주고 수명주기를 관리해 인스턴스를 제공하는 역할을 한다.

이를 종속 클래스의 그래프(the graph of dependencies)를 관리한다고 한다. 

 

컨테이너는 인스턴스를 가져올  있는 메소드를 노출한다. 

 메소드는 항상 다른 인스턴스 또는 동일한 인스턴스를 반환할  있다. 

 

 

 

 

 

 

추가 

https://lovestudycom.tistory.com/entry/Android-Hilt%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85

 

Android Hilt를 이용한 의존성 주입

Android에서 DI(Dependency Injection)은 프로그래밍에 많이 사용되는 테크닉이며 안드로이드 개발에 적합하다. 또한, 리팩토링 용이, 재사용성 : 의존성이 필요한 클래스를 직접 생성하지 않으므로 클래

lovestudycom.tistory.com

 

728x90
반응형

'Android 공부 > DI ( 의존성 주입 )' 카테고리의 다른 글

DI ) Dagger2의 5가지 필수 개념  (0) 2022.04.26
DI ) Dagger2 란?  (0) 2022.04.25
[Android] DI Framework (Dagger2, Koin, Hilt)  (0) 2022.04.18
[Android] DI ??  (0) 2022.04.18