본문

160818(목) - Dagger2

Dagger2


Dagger2

- http://drcarter.tistory.com/169

- http://www.slideshare.net/ssuser70b5b8/android-and-dagger2

- https://medium.com/@jason_kim/tasting-dagger-2-on-android-%EB%B2%88%EC%97%AD-632e727a7998#.r6ybs1coo



@Inject

의존성 주입을 통해서 해당 어노테이션이 달린 클래스나 필드에게 값을 주입해 달라고Dagger에게 요청.

Dagger는 Annotation이 달린 클래스의 인스턴스를 생성하고 그것들의 의존성을 만족.


@Module

의존성을 제공하는 method들을 가진 클래스

의존성을 제공하는 클래스를 정의하고 @Module Annotation을 달아주게 되면, Dagger는 class instance를 만들 때 의존성을 만족시키기 위한 정보를 찾을 수 있음.


@Provider

Module 안에서 해당 어노테이션이 달린 method를 정의


@Component

@Inject와 @Module의 다리 역할. 의존성을 주입한다.

컴포넌트는 미리 정의한 모든 타입의 instance를 건네준다.

Interface에만 달아야 하며, 컴포넌트를 구성하는 모든 @Module이 달린 클래스 목록을 적어야 한다.(하나라도 없으면 컴파일 오류)

Application의 수명이 == component의 수명


@Scope

객체 범위의 단위를 정의 가능


@Qualifier

클래스의 유형이 종속성을 식별하기 불충분할 때 사용

Context를 주입할 때, 이 식별자 Annotation을 이용해서 Dagger가 어떤 타입을 제공할지 정해준다.

ex)

@ForApplication

@ForActivity


@Singleton

Application 하나당 하나의 인스턴스로 제약을 건다.


@PerActivity

객체의 수명이 액티비티의 수명을 따를 경우 사용하는 사용자 정의 스코프 어노테이션



  1. @Retention – indicates how long annotations with the annotated type are to be retained. It takes RetentionPolicy argument whose Possible values are SOURCE, CLASS and RUNTIME
장점
- 액티비티가 생성되어있기를 요구하는 부분에 객체 인젝트
- 액티비티 기반의 싱글톤 객체 사용
- 글로벌 객체 그래프와 분리



공유

댓글