혼자 있고 싶네요. 모두 나가주세요.
Dagger2 이해하기 본문
이전 포스트 : Dagger1 vs Dagger2
Dagger2 조금 더 쉽게 이해하기
MainActivity를 구성하려면 다양한 DI가 필요하다. 다양한 DI 인스턴스들을 사용할 때 매번 비슷 비슷한 초기화 코드를 추가하여 주고, 변수를 바꾸기라도 하는 날엔 Ctrl+F로 일일이 찾아다니면서 고쳐야 한다. 이런 보일러플레이트를 없애고, 단위 테스트와 코드 재사용성을 높이는 것이 Dagger2의 주 목표라고 할 수 있겠다.
<많은 DI를 필요로 하는 Android APP은 필시 많은 수의 new를 사용할 것이다>
<MainActivity(문어)가 DI instantiation(촉수)를 통해 필요한 클래스들에 접근하는 모습이다>
<이 복잡한 걸 Dagger2가 해냅니다>
Dagger2 구조
기본적으로 알아야할 annotation들이다.
@Inject : DI를 주입당할 대상이다.
@Component : @Inject와 @Provides 사이의 연결 다리이다. 인터페이스
@Module : DI를 주입하는 메서드를 가지는 클래스에 사용한다.
@Provides : DI를 주입한다.
Dagger$CustomComponent라는 클래스는 $CustomComponent의 명명에 맞추어 자동 생성 된다.
Dagger2 권고 사항
- Generated code가 가볍고 몹시 효율적이기 때문에 64K 메소드 제한에 대한 걱정은 안해도 된다고 한다.
- 생성자에 @Inject를 하지않는 것이 좋다. 클래스를 인스턴스화 하는 것을 찾는 것이 힘들다고 한다.
- component를 만들면, reference를 유지하여 재생성을 방지하는 것이 좋다.
- 일반적으로 Android에서 Injection을 수행하기 좋은 최적의 위치는 다음과 같다.
- Application
super.onCreate()
다음에 최대한 빨리 component를 만들 것- Activity/Service
super.onCreate()
바로 전에 component를 만들 것- Fragment
- Fragment.onAttach()를 통해 host Activity로 부터 reference를 유지하고,
Fragment.onActivityCreated()
에서 host activity에게 Injection을 위임할 것 - 근데 Fragment는 lifecycle이 프로그램마다 상이할 수 있으니, 잘 판단해서 고쳐 쓸 것
참고 링크
'타닥타닥 > 용어 정리' 카테고리의 다른 글
Dagger1 vs Dagger2 (0) | 2017.09.25 |
---|---|
[Android]Dependency Injection 이란? (0) | 2017.09.19 |
Comments