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

More Related Content

What's hot

Angular CodeLab 두번째
Angular CodeLab 두번째Angular CodeLab 두번째
Angular CodeLab 두번째
SangHun Lee
 
Android QA Process
Android QA ProcessAndroid QA Process
Android QA Process
Young-Hyuk Yoo
 
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GDG Korea
 
Welcome to Android Studio
Welcome to Android StudioWelcome to Android Studio
Welcome to Android Studio
WonKyun Lim
 
gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기
Manjong Han
 
20130709 gradle
20130709 gradle20130709 gradle
20130709 gradleSukjin Yun
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈
용근 권
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
Daniel Lim
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
Daniel Lim
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
Daniel Lim
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
Donghyun Seo
 
양파지기 - Ant, Maven, Gradle
양파지기 - Ant, Maven, Gradle양파지기 - Ant, Maven, Gradle
양파지기 - Ant, Maven, Gradle
yong geun Kwon
 
Yapp a.a 2 2 android annotations
Yapp a.a 2 2 android annotationsYapp a.a 2 2 android annotations
Yapp a.a 2 2 android annotations
Junyoung Lee
 
iOS Modular Architecture with Tuist
iOS Modular Architecture with TuistiOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist
정민 안
 
그루비로 안드로이드 앱 개발하기
그루비로 안드로이드 앱 개발하기그루비로 안드로이드 앱 개발하기
그루비로 안드로이드 앱 개발하기
Sangkyoon Nam
 

What's hot (16)

Angular CodeLab 두번째
Angular CodeLab 두번째Angular CodeLab 두번째
Angular CodeLab 두번째
 
Android QA Process
Android QA ProcessAndroid QA Process
Android QA Process
 
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
GKAC 2015 Apr. - 테스트 코드에서 코드 커버리지까지
 
Welcome to Android Studio
Welcome to Android StudioWelcome to Android Studio
Welcome to Android Studio
 
gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기gradle로 안드로이드 앱 빌드하기
gradle로 안드로이드 앱 빌드하기
 
20130709 gradle
20130709 gradle20130709 gradle
20130709 gradle
 
우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈우아한테크세미나-우아한멀티모듈
우아한테크세미나-우아한멀티모듈
 
Gradle guide
Gradle guideGradle guide
Gradle guide
 
Design Pattern 3
Design Pattern 3Design Pattern 3
Design Pattern 3
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
 
Desing Pattern-2
Desing Pattern-2Desing Pattern-2
Desing Pattern-2
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
양파지기 - Ant, Maven, Gradle
양파지기 - Ant, Maven, Gradle양파지기 - Ant, Maven, Gradle
양파지기 - Ant, Maven, Gradle
 
Yapp a.a 2 2 android annotations
Yapp a.a 2 2 android annotationsYapp a.a 2 2 android annotations
Yapp a.a 2 2 android annotations
 
iOS Modular Architecture with Tuist
iOS Modular Architecture with TuistiOS Modular Architecture with Tuist
iOS Modular Architecture with Tuist
 
그루비로 안드로이드 앱 개발하기
그루비로 안드로이드 앱 개발하기그루비로 안드로이드 앱 개발하기
그루비로 안드로이드 앱 개발하기
 

Viewers also liked

주니어 개발자도 이해 할 수 있는 의존성 주입(Dependency Injection)
주니어 개발자도 이해 할 수 있는 의존성 주입(Dependency Injection)주니어 개발자도 이해 할 수 있는 의존성 주입(Dependency Injection)
주니어 개발자도 이해 할 수 있는 의존성 주입(Dependency Injection)
Darion Kim
 
Dagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionDagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency Injection
Stfalcon Meetups
 
Dagger 2 ppt
Dagger 2 pptDagger 2 ppt
Dagger 2 ppt
Swati Srivastava
 
Dependency Injection with Dagger 2 presentation
Dependency Injection with Dagger 2 presentationDependency Injection with Dagger 2 presentation
Dependency Injection with Dagger 2 presentation
JT Liew
 
Dependency injection ppt
Dependency injection pptDependency injection ppt
Dependency injection ppt
Swati Srivastava
 
[JWPA-1]의존성 주입(Dependency injection)
[JWPA-1]의존성 주입(Dependency injection)[JWPA-1]의존성 주입(Dependency injection)
[JWPA-1]의존성 주입(Dependency injection)
Young-Ho Cho
 
주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상
주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상
주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상
Darion Kim
 
토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx
Myeongin Woo
 
Kotlin.md
Kotlin.mdKotlin.md
Kotlin.md
Myeongin Woo
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
beom kyun choi
 

Viewers also liked (10)

주니어 개발자도 이해 할 수 있는 의존성 주입(Dependency Injection)
주니어 개발자도 이해 할 수 있는 의존성 주입(Dependency Injection)주니어 개발자도 이해 할 수 있는 의존성 주입(Dependency Injection)
주니어 개발자도 이해 할 수 있는 의존성 주입(Dependency Injection)
 
Dagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionDagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency Injection
 
Dagger 2 ppt
Dagger 2 pptDagger 2 ppt
Dagger 2 ppt
 
Dependency Injection with Dagger 2 presentation
Dependency Injection with Dagger 2 presentationDependency Injection with Dagger 2 presentation
Dependency Injection with Dagger 2 presentation
 
Dependency injection ppt
Dependency injection pptDependency injection ppt
Dependency injection ppt
 
[JWPA-1]의존성 주입(Dependency injection)
[JWPA-1]의존성 주입(Dependency injection)[JWPA-1]의존성 주입(Dependency injection)
[JWPA-1]의존성 주입(Dependency injection)
 
주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상
주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상
주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상
 
토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx토이 프로젝트를 하자.Pptx
토이 프로젝트를 하자.Pptx
 
Kotlin.md
Kotlin.mdKotlin.md
Kotlin.md
 
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
 

Similar to Dagger 2.0 을 활용한 의존성 주입

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
Kyung Koo Yoon
 
Scoped di with dagger2
Scoped di with dagger2Scoped di with dagger2
Scoped di with dagger2
Myeongseok Baek
 
Android DI With Hilt
Android DI With HiltAndroid DI With Hilt
Android DI With Hilt
SSLEE14
 
Spring IoC
Spring IoCSpring IoC
Spring IoC
Suan Lee
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
AnselmKim
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
Yeon Soo Kim
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
Minseok Jang
 
My di container
My di containerMy di container
My di container
JAE YOON LEE
 
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
Woojin Joe
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
양 한빛
 
React native development
React native developmentReact native development
React native development
SangSun Park
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Sa-ryong Kang
 
CleanSwift 적용기
CleanSwift 적용기CleanSwift 적용기
CleanSwift 적용기
ssuser86e2971
 
IoC and DI Pattern
IoC and DI PatternIoC and DI Pattern
IoC and DI Pattern
Sangwon Ko
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
Seongchan Kang
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
Gyuwon Yi
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
명석 고
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
EunYoung Kim
 

Similar to Dagger 2.0 을 활용한 의존성 주입 (20)

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Scoped di with dagger2
Scoped di with dagger2Scoped di with dagger2
Scoped di with dagger2
 
Android DI With Hilt
Android DI With HiltAndroid DI With Hilt
Android DI With Hilt
 
Spring IoC
Spring IoCSpring IoC
Spring IoC
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
My di container
My di containerMy di container
My di container
 
Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
 
React native development
React native developmentReact native development
React native development
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
CleanSwift 적용기
CleanSwift 적용기CleanSwift 적용기
CleanSwift 적용기
 
IoC and DI Pattern
IoC and DI PatternIoC and DI Pattern
IoC and DI Pattern
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리VSTS와 Azure를 이용한 팀 프로세스 관리
VSTS와 Azure를 이용한 팀 프로세스 관리
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
I os 1
I os 1I os 1
I os 1
 

Dagger 2.0 을 활용한 의존성 주입

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