Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

혼자 있고 싶네요. 모두 나가주세요.

Dagger2 이해하기 본문

타닥타닥/용어 정리

Dagger2 이해하기

아무것도몰라양 2017. 9. 26. 23:41

이전 포스트 : 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이 프로그램마다 상이할 수 있으니, 잘 판단해서 고쳐 쓸 것


참고  링크 

Dependency Injection Using Dagger 2 - GDG Cincinati


'타닥타닥 > 용어 정리' 카테고리의 다른 글

Dagger1 vs Dagger2  (0) 2017.09.25
[Android]Dependency Injection 이란?  (0) 2017.09.19
Comments