Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Dagger 2.0 을 활용한 의존성 주입

2,251 views

Published on

dagger 2 를 활용한 의존성 주입에 대한 개념 설명

Published in: Technology
  • Be the first to comment

Dagger 2.0 을 활용한 의존성 주입

  1. 1. dependency Injection with Dagger 2 BBBTech Inc. 윤승용 for Android
  2. 2. Dependency injection? • 디자인 패턴의 한 종류 • IOC (Inversion of control) 원리 사용 • 객체와 관련된 의존성을 외부에서 주입
  3. 3. Dependency injection?
  4. 4. Dependency injection?
  5. 5. Dependency injection? No DI With DI
  6. 6. Dependency injection의 장점 • 재사용성 • 테스트용이성 • 유지보수성
  7. 7. Problem?
  8. 8. Problem? Dependency Injection Framework
  9. 9. Dependency Injection Framework • Spring • Guice • Dagger 1 • PicoContainer • CDI • Dagger 2
  10. 10. Dependency Injection Framework • Dagger 2
  11. 11. Dagger 2 • 컴파일 타임 체크 가능 • 디버깅과 추적이 가능함 • Dagger 1보다 13% 성능 향상 • 의존성에 대한 범위 제한이 가능함
  12. 12. Android에서 어떻게 활용할 것인가? • Context가 필요한 클래스 • Application 생명주기와 밀접한 클래스 (DB Manager, System Services, Analytics tracker) • 핵심 비즈니스 로직
  13. 13. Android에서 어떻게 활용할 것인가? • Context가 필요한 클래스 • Application 생명주기와 밀접한 클래스 (DB Manager, System Services, Analytics tracker) • 핵심 비즈니스 로직 ButterKnife의 Object 버전이라 생각하면 이해하기 편할 듯
  14. 14. Dagger 2 API • @Inject : 의존성을 요청 • @Module : 의존성을 제공하는 메서드들을 가진 클래스 • @Provide : 모듈 내에서 언급된 의존성들을 어떻게 구성하 고 제공하는지 알려주는 메서드 • @Component : @Module들과 @Inject사이의 다리 역할
  15. 15. Dagger 2 API Dagger 2는 모듈(@Module) 에서 제공(@Provide)하는 요소들을 브릿지(@Component)에서 연결시켜준 클래스 내에서 요청 (@Inject)하는 의존 요소나 다른 @Provide에서 요청하 는 인자들에 주입 시켜준다.
  16. 16. Dagger 2 API • @Scope : 의존성 관련 객체의 범위를 지정함 • @Qualifier : 같은 클래스의 종속성을 식별하는 식별자
  17. 17. Dagger 2 API • @Inject : 의존성을 요청 • @Module : 의존성을 제공하는 메서드들을 가진 클래스 • @Provide : 모듈 내에서 언급된 의존성들을 어떻게 구성하 고 제공하는지 알려주는 메서드 • @Component : @Module들과 @Inject사이의 다리 역할 • @Scope : 의존성 관련 객체의 범위를 지정함 • @Qualifier : 같은 클래스의 종속성을 식별하는 식별자
  18. 18. Constructor Injection • 생성자에 @Inject 어노테이션 • 생성자 인자가 의존 요소 • 이 경우에 private final 에 의존성을 주입할 수 있다
  19. 19. Method Injection • 메서드에 @Inject 어노테이션 • 메서드 인자가 의존 요소 • 객체가 생성된 후 주입이 발생 • 의존요소에 this 를 전달할 경우에만 사용하는 것을 권장함
  20. 20. Field Injection • 필드(멤버변수)에 @Inject 어노테이션 • 필드는 private final이 될 수 없다 • 객체가 생성된 후 주입이 발생 • 자체적으로 주입에 대한 처리가 필요함 • Constructor Injection을 사용하지 못하는 경우 사용 가능 (e.g. Activity)
  21. 21. Scope Annotations • 단 하나만의 인스턴스를 생성한다 • @Singleton은 제일 큰 범위의 어노테이션이다 • 아래와 같은 코드로 Custom 스코프 어노테이션을 지정할 수 있다
  22. 22. Show me the code!!
  23. 23. 결론 • Android 프레임워크 특성상의 Boilerplate 코드들을 줄일 수 있음 • 객체간의 결합도를 느슨하게 만들어 테스트나 유지보수가 편리함 • MVP 패턴의 아키텍쳐를 고려해봤을 때, Presenter 요소를 매 Activity마다 쉽게 주입할 수 있게 됨. • 다만, 개념이 어렵고 의존관계에 대한 코드상의 트래킹이 어려울 가 능성이 있기 때문에, 프로젝트 내 모든 의존성을 Dagger로 대체하는 것은 오버 엔지니어링이라는 판단. • Test가 반드시 필요한 핵심 비즈니스 모델과 Boilerplate코드가 난무 하는 Application, Activity, Fragment 요소들에만 우선적으로 적용하 는 것을 목표.

×