본문 바로가기

Android

DI(의존성 주입) 프레임워크 : Dagger2란

728x90

 Dagger2란?

Dagger2는 자바와 안드로이드를 위한 빠른 의존성 프레임워크 입니다. Dagger2는 리플렉션을 사용하지 않고, 런타임에 바이트 코드도 생성하지 않는 것이 특징이며, compile time에 어노테이션 프로세서에 의해 의존성 주입과 관련된 모든 코드를 분석한 후 자바 소스 코드를 생성합니다.

 

Dagger2의 가파른 학습 곡선

  • 어노테이션 기반의 코드 생성 방식이 익숙하지 않아 내부가 어떤 식으로 동작하는지 유추가 어려움
  • 다른 DI 라이브러리보다 공부해야할 부분이 더 많음
  • Component, Subcomponent, Module 등과 같은 Dagger에서만 사용하는 용어로 인해 혼란스러움

그래서일까... 의존성 주입을 공부하다, Dagger2에서 어려워서 포기한 적 있습니다. 

 

Dagger2의 장점

  • 자원 공유의 단순화. 지정된 범위의 생명주기 내에서 동일 인스턴스를 제공합니다.
  • 복잡한 의존성을 단순하게 설정함. 애플리케이션이 커질수록 많은 의존성을 갖는데 Dagger는 이를 쉽게 제어해 줍니다.
  • 유닛테스트를 쉽게 도와준다.
  • 자동 코드 생성. 생성된 코드는 명확하고 디버깅이 가능합니다.
  • Dagger2는 난독화 문제가 없습니다. Dagger1은 리플렉션 사용으로 런타임에 성능 및 난독화 관련 문제가 발생했습니다.
  • 라이브러리 크기가 작습니다.

 

*리플렉션 : 구체적인 클래스 타입을 몰라도, 접근할 수 있도록 해주는 자바 API

*바이트 코드(Bytecode) : 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법

*어노테이션(Annotation) : 비즈니스 로직에 영향을 주지는 않지만 해당 타겟의 연결 방법, 소스코드의 구조 등을 변경 가능


 

다음 시간은 직접 예제를 구현해보겠습니다.