안드로이드/정리(Android)

Android - Hilt(의존성주입)

김염인 2022. 8. 15. 14:08

@AndoidEntryPoint를 붙이는 것은 Component를 만드는 과정 Component에서 Component로 의존성 주입 및 받기 가능, 주입 받을 Class에 AndroidEntryPoint 붙인다

 

 

 

ㅁ Filed Ingection

ㅁ Constructor Ingection

 

ㅁ Module

 

ㅁ Hilt를 통하지 않고 Build패턴이나 외부라이브러리를 이용해서 객체를 생성해야 할때는 Privides를 사용 여기서

1) @Modules을 붙임으로서 Hilt의 모듈이 된다.

2) @InstallIn(ActivityComponent::class) 를 붙임으로서 ActivityComponent 안에 설치되면서 Scope가 ActivityScope로 설정된다.

3) 모듈 안에는 AnalyticsService로 반환하는 함수가 있는데 이 함수에 Provides를 붙임으로서 AnalyticsModule이 AnalyticsService의 의존성을 외부로 전달할 수 있게 된다.

ㅁ AnalyticsService라는 Interface를 의존객체로 제공하기위해서는 Binds

이때 Abstact로 binds 구현해야함

 

실제 사용 예시(BookService 앱을 예시)

 

 - 기존 RetrofitInastance Object를 Hilt Module로 만들어 줘보자.

- Module로 생성

@Module

 

 

// Room 의존성 작성

 

// workmanager 의존성 작성 

 

// repository 주입 받기 위한 모듈 작성

 


<정리 : 의존성주입은 단방향 >

1) Appmodule에 의존성을 BookSearchRepasitory에 주입을 한다

2) BookSearchRepasitory Instancesms의존성을 BookSearchViewmodel에 주입

3) 각 BookSearchViewmodel 의 의존성을 Fragment나 Activity에 주입

 

(1) Appmodule에 의존성을 BookSearchRepasitory에 주입

- @Singleton을 붙여 의존성 주입 가능한 Scope로 지정해줌, 그러면 Inject constructor(여기 안에 객체들은 Hilt가 주입을 하게 된다.)

 

(2) Viewmodel에 의존성주입

 

(3) Fragment에 Viewmodel 주입

- delegate 추가하면 viewmodel factory만들 필요 없음, Viewmodel이 delegate에 의해 만들어지기 때문에 ProviderFactory는 필요 없어진다!

 

- @AndroidEntryPoint로 Fragment가 의존성 주입 가능한 스코프로 만들어주고 activityViewModels를 이용하여 의존성을 받는다

'안드로이드 > 정리(Android)' 카테고리의 다른 글

안드로이드 HTTP 통신  (2) 2022.09.09
Android) Databinding 정리  (0) 2022.08.16
[Android] ViewModel 알아보기  (0) 2022.08.04
Android - CustomView 만들기  (0) 2022.05.12
Android - MVVM + ROOM + RETROFIT 활용 앱  (0) 2022.04.26