관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[안드로이드] DI 대거(Dagger2) 공부자료 및 적용해보기 (Koin -> Dagger) 본문

안드로이드/코틀린 & 아키텍처 & Recent

[안드로이드] DI 대거(Dagger2) 공부자료 및 적용해보기 (Koin -> Dagger)

막무가내막내 2020. 7. 19. 19:10
728x90

 

[2021-04-14 업데이트]

 

안녕하세요 ㅎㅎ 요즘 블로그 포스팅할 시간이 없어 못하고있네요 ㅠㅠ

저도 현재 사용해야할 기술 중 하나이고 처음 공부 중이기 떄문에 DI 와 Dagger2 에 대한 개념은 추후에 더 학습 후 정리하도록 하겠습니다. 

현재 하고 있는 프로젝트에 적용하기 전에 예전에 만든 영화검색앱 샘플 프로젝트에 간단하게 적용해봤습니다. 다른 앱은 싱글 액티비티(SPA) 구조여서 서브컴포넌트가 하나로 해놨지만 이 영화 앱과 DI 그래프 구조가 크게 달라질 것 같진 않습니다.  

 

 

일단 참고한 사이트 나열 합니다.

 

1. 코드랩

역시 처음 실습은 코드랩이 짱이지..

https://codelabs.developers.google.com/codelabs/android-dagger/#12

 

Using Dagger in your Android app - Kotlin

In Android, you usually create a Dagger graph that lives in your Application class because you want the graph to be in memory as long as the app is running. In this way, the graph is attached to the app's lifecycle. In our case, we also want to have the ap

codelabs.developers.google.com

 

2..  안드로이드 공식문서

한번은 꼭 읽어야하는 필수코스.

https://developer.android.com/training/dependency-injection/dagger-android

 

 

3. 블로그 

먼저 밑에분의 블로그는 뷰모델 구현에 큰 도움이 되었습니다. 코드도 있어서 보고 하기 좋더라고요. 그래프도 그려놓셔서 공식문서의 그래프와 비교하면서 이해하기도 더 좋았던 것 같습니다.

(1) https://github.com/spotlight21c/DaggerViewModel

 

spotlight21c/DaggerViewModel

viewmodel with dagger2. Contribute to spotlight21c/DaggerViewModel development by creating an account on GitHub.

github.com

https://trend21c.tistory.com/2111

 

dagger2 android viewmodel 과 사용하기

안드로이드 공식 문서에 있는 ViewModel의 간단한 예제이다 그도그럴것이 MyViewModel의 생성자에 아무런 인자가 없다 그러니깐 별도의 의존성을 고민할 필요 없이 ViewModelPrivoder를 통해 ViewModel을 생��

trend21c.tistory.com

(2)https://android.jlelse.eu/7-steps-to-implement-dagger-2-in-android-dabc16715a3a

 

7 steps to implement Dagger 2 in Android

So I finally got a chance to explore the new Dagger 2 in a project recently. And while there are a lot of resources online about what is…

android.jlelse.eu

 

4. 커니의 코틀린 샘플코드

https://github.com/kunny/kunny-kotlin-book/tree/dagger-step-2

 

kunny/kunny-kotlin-book

'차세대 안드로이드 개발자를 위한: 커니의 코틀린' 예제 프로젝트 저장소. Contribute to kunny/kunny-kotlin-book development by creating an account on GitHub.

github.com

 

 

 

 


제가 적용한 프로젝트입니다.

기존 Koin 을 적용한 프로젝트에서 Dagger2 로 변경작업을 해봤습니다. (RxJava2 적용 전의 Koin 프로젝트입니다. )

 

[기존 Koin 프로젝트 ]

https://github.com/mtjin/android-architecture-study-movieapp/tree/master/BACK_UP/7-DI(KOIN)/AndroidArchitectureStudy

 

mtjin/android-architecture-study-movieapp

안드로이드 아키텍처 스터디 정리. Contribute to mtjin/android-architecture-study-movieapp development by creating an account on GitHub.

github.com

 

[Dagger 로 변경작업한 프로젝트]

https://github.com/mtjin/android-architecture-study-movieapp/tree/master/BACK_UP/10-Dagger2/AndroidArchitectureStudy

 

mtjin/android-architecture-study-movieapp

안드로이드 아키텍처 스터디 정리. Contribute to mtjin/android-architecture-study-movieapp development by creating an account on GitHub.

github.com

그래프는 다음과 같이 적용하였습니다.

[참고]

3개의 액티비티로 이루어진 간단한 토이 프로젝트 이므로 이런식으로 적용하였고 실제 적용할 프로젝트에서는 싱글액티비티 구조이므로 하나의 서브컴포넌트에 액티비티 하나와 여러개의 프래그먼트를 inject 시키는 구조로 만들었습니다.

그리고 서브컴포넌트에 @ActivityScope 를 적용시키고 기타 다른 DataModule 등에는 상황에 따라 @Singeton 과 @Reusable 스코프를 주는식으로 DI 그래프 구조를 만들었습니다.

둘의 차이점은 다음에서 정리해놨습니다.

youngest-programming.tistory.com/356

 

[코틀린] DI Dagger2 @Singleton vs @Resuable 차이점 정리

https://proandroiddev.com/dagger-2-check-singlecheck-doublecheck-scopes-4ee48fc31736 Dagger 2 : Check — SingleCheck — DoubleCheck … Scopes This article is a part of the “Dagger 2 Android: Defeat..

youngest-programming.tistory.com

 

댓글과 공감은 큰 힘이 됩니다. 감사합니다!!!

728x90
Comments