Dagger 2 생성 코드
원본 :https://medium.com/mindorks/dagger-2-generated-code-9def1bebc44b
왜 또 Dagger2 글인가?
당신이 무슨 생각을 하는 지 알고 있다. 왜 또 dagger2 글인가.. 맞지 않는가? 하지만 이 글의 목적은 Dagger2를 당신의 프로젝트에 어떻게 사용해야 하는 지를 보여주기 위한 것이 아니며(그런 것을 찾고 있다면여기에 좋은 예제가 있다) 대신 Dagger가 생성하는 코드를 자세히 살펴보고 Dagger가 당신의 의존성 그래프를 생성할 때 내부적으로 무엇을 하는지를 이해하기 위함이다.
사전 지식:
이 두 패턴에 익숙하지 않다면, 이 글의 나머지 부분들이 조금 당황스러울 것이다. 복습이 필요하다면 온라인에 충분한 자원들이 존재한다.
3. Dagger 2 라이브러리 숙지
조금 전에도 언급했듯이 이 글은 Dagger 2를 소개하는 것이 아니다. 당신이 Dagger 2을 사용해 본 적이 없거나 복습이 필요하다면Janishar Ali의 다음 글을 참고하라.
예제:
코드 샘플을 위해 MindorksOpenSource’sandroid-dagger2-example의 포크를 사용 할 것이다.
https://github.com/iamBedant/android-dagger2-example
이 트리는 예제의 의존성 그래프를 묘사한다.
이 의존성을 생성하기 위해 우리는 두 모듈(ApplicationModule
&Activity Module
)과 그들 각자의 컴포넌트(ApplicationComponent
,ActivityComponent
)들이 필요하다.
ApplicationModule.java:
ActivityModule.java:
ApplicationComponent.java:
ActivityComponent.java:
이제 우리는 우리 앱의 어디에라도 의존성들을 주입할 수 있다. 예를 들어 어떤 이유로 애플리케이션 클래스에서DataManager
의 인스턴스를 원한다면 다음처럼 쉽게 주입할 수 있다.
DemoApplication.java
Activity에 동일한 것을 원한다면 다음처럼 얻을 수 있다.
DataManager 클래스의 생성자가 어떤지 보자.
DataManager.java:
DataManager
클래스가 3개의 외부 클래스Context
,DbHelper
그리고SharedPrefHelper
들에 의존을 가지고 있음에도 단 한 줄로 여기에 주입할 수 있다. 이는 Dagger 2가 어떻게 당신의 삶을 더 편하게 만들어 주는지를 보여준다.
지금까지는 우리 모두 알고 있는 것을 화제로 삼았다. 조금 깊이 들어가 Dagger 2의 내부에서는 무엇을 하는 지를 볼 시간이다.
생성된 코드:
--먼저 생성된 코드의 책임을 이해하기 위해 각각을 분리하여 검토할 것이다. 일단 그렇게 한 뒤, 우리의 삶을 더 편하게 만들기 위해 이 모든 클래스들이 어떻게 함께 작동하는지를 보도록 하자.
기본적으로, Dagger 2는 당신의 의존성을 위한 팩토리들의 묶음을 생성한다.