개발하는 두더지

[Android] DI, Dagger2 란? 본문

Java,Android

[Android] DI, Dagger2 란?

덜지 2018. 4. 22. 00:30

DI란?

Dependency Injection 의존성 주입

구성요소간의 의존 관계가 소스코드 내부가 아닌 외부 설정 파일등을 통해 정의되게하는 디자인 패턴중 하나이다.

예를들면, 카페에서 커피를 만드는데 커피 머신이 어떤 부품으로 구성되어있는지 바리스타는 알필요가 없다는 개념으로 보면 될 것 같다.

이렇게 분리시켜 놓으면 객체의 생성과 사용을 분리시킬 수 있고, 재사용이 유연해진다.



Dagger란?

DI를 도와주는 Framework으로 의존성 주입 관계를 annotation을 이용해 표현한다.

Dagger1은 Square에서 처음 만들었고 Dagger2는 Google이 관리


@Module + @Provides              =>     의존성 제공
@Inject                                   =>     의존성 요청
@Component                           =>     Module과 Inject 사이의 브릿지 역할



@Qualifier 은 동일한 유형이지만 다른 인스턴스를 가진 객체를 구별하는데 사용된다.
@Qualifer
public @interface ActivityContext {
}

@Qualifer
public @interface ApplicationContext {
}


@Scope 는 종속성 개체가 지속되는 범위를 지정하는 데 사용된다.





Dagger2 적용 방법

https://github.com/google/dagger

build.gradle에 아래 내용 추가

//Dagger
compile 'com.google.dagger:dagger:2.0'
annotationProcessor 'com.google.dagger:dagger-compiler:2.0'



빌드 시 cannot find symbol class Generated 발생하면?

https://stackoverflow.com/a/31856869

build.gradle 에 아래 내용 추가

provided 'javax.annotation:jsr250-api:1.0'


최신 버전을 사용하자

https://github.com/google/dagger/releases

//Dagger
compile 'com.google.dagger:dagger:2.15'
annotationProcessor 'com.google.dagger:dagger-compiler:2.15'
compile 'com.google.dagger:dagger-android:2.15'
compile 'com.google.dagger:dagger-android-support:2.15'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.15'






참고

DI와 Dagger (1)


DI와 Dagger (2)


Dagger를 이용하여 안드로이드에서 DI 구현


Jake Wharton Dagger2 발표자료


Dagger를 사용하기전에 개념잡고 가기


Dagger2 개념 및 샘플


Dagger2 학습에 필요한 참고자료 커니의 안드로이드 이야기


Dagger2 + MVP 적용한 Google Sample


작고 심플한 Dragger2 Sample


Dagger2 + Github API 사용한 Sample


Fernando Cejas 가 작성한 Tasting Dagger 2 on Android 번역 정리



Comments