Top Banner
Scoped DI with Dagger2 Daum Cafe Mikael
19

Scoped di with dagger2

Apr 13, 2017

Download

Software

Myeongseok Baek
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Scoped di with dagger2

Scoped�DI�with�Dagger2

Daum�Cafe�Mikael

Page 2: Scoped di with dagger2

발표목차

• Intro�•Dagger�Overview�•Sample�App�•Objects�in�Scopes�•Custom�Scopes�•Scope을�구현하는�2가지�방법�•실행흐름

Page 3: Scoped di with dagger2

Intro

•https://github.com/frogermcs/GithubClient�•Dagger2를�application�/�user�/�activity�scope으로�나눠서�사용하는�방법�

•Subcomponent를�활용�•plus(서브�컴포넌트�생성)�메소드를�통해�명시적으로�life�cycle�관리

Page 4: Scoped di with dagger2

Dagger�Overview

• Component,�Module에�제공될�DI�객체들�정의�•사용하는�곳에서�@Inject�어노테이션을�통해�주입받음�

•Activity,�Fragment�등에서는�component에�대한�참조를�얻어서�자기�자신을�전달하여�의존성을�주입받음

Page 5: Scoped di with dagger2

Dagger�Component

• component는�아래를�정의�–DI로�제공될�객체들을�생성할�모듈(ApplicationModule)�

– Injection이�일어날�대상(BaseActivity)�–DI로�제공될�객체들(Context,�RetrofitServiceFactory,�UserRepository,�RxBus)

Page 6: Scoped di with dagger2

Dagger�Module

•DI로�제공할�객체들(Context,�RetrofitServiceFactory,�UserRepository,�RxBus)을�생성하는�로직들을�갖는다

Page 7: Scoped di with dagger2

Dagger�Component�&�Module

Page 8: Scoped di with dagger2

Dagger�Client

Page 9: Scoped di with dagger2

Dagger�Client

Page 10: Scoped di with dagger2

Sample�App

Page 11: Scoped di with dagger2

Objects�in�Scopes

•application�scope�–Application,�AnalyticsManager,�Validator,�HeavyExternalLibrary�등��

•user�scope�–User,�RepositoriesManager(User에�의존)��•activity�scope�–XXXActivity,�XXXPresenter,�XXXListAdapter,�LinearLayoutManager,�XXXFactory�등

Page 12: Scoped di with dagger2

Custom�Scopes

•@UserScope은�사용자�경험�측면에서는�아무런�차이도�없음�

•하지만�아키텍쳐�측면에서는���–User�인스턴스를�Intent의�파라미터로�전달하지�않고도�제공�

–메소드�파라미터에�user�data를�필요로�하는�클래스들은�user를�생성자�주입을�통해�전달�받을�수�있고,�앱의�런칭때�생성하지�않고,�필요한�시점에�초기화될�수�있음

Page 13: Scoped di with dagger2

Scope을�구현하는�2가지�방법�

•1.�@Subcomponent��•2.�Components�Dependencies��

•차이점:�객체�그래프�공유�방식

Page 14: Scoped di with dagger2

•1.�최초�app�시작�–Application#onCreate��

!AppComponent�built��

–Main�Activity#onCreate��!SplashActivityComponent�built�

실행�흐름

Page 15: Scoped di with dagger2

•1.�최초�app�시작

실행�흐름

Page 16: Scoped di with dagger2

•2.�username�입력�후�show�repositories�버튼�클릭

실행�흐름

Page 17: Scoped di with dagger2

•activity�scope�component�생성�

–UserComponent의�하위�컴포넌트로�RepositoriesListActivityComponent를�생성하고,�inject를�호출하여�DI

실행�흐름

Page 18: Scoped di with dagger2

•3.�back�button�click해서�usename�입력�화면으로�돌아올�때

실행�흐름

Page 19: Scoped di with dagger2

•4.�repository�clicked

실행�흐름