Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

sanichdaniel의 iOS 개발 블로그

Dagger2 알아보기 본문

dependency injection

Dagger2 알아보기

sanich8355 2020. 10. 4. 19:05
프로퍼티 래퍼를 이용하여 DI를 구현해보던중 안드로이드 Dagger2를 참고해보면 좋을것 같다는 생각이 들어 Dagger를 공부해보았다.
Dagger의 장점으로는 어노테이션만 붙이면 의존성이 해결된다는 점이다. 즉 작업하면서 의존성에대해 고민할 필요가 없어진다. 

Dagger 기본개념

1. Module

2. Inject

3. Component

4. Subcomponent

5. Scope

 

1. Module

의존성을 생성하는 함수들을 가진 클래스

@Module은 클래스에 붙고

@Provides는 각 메서드에 붙는다

대거가 이 모듈을 파싱할때, 리턴 타입과 메서드를 associate 한다.

근데 만약 함수가 인자를 받는다면, 그 인자의 타입과도 associate 한다.

(associate한다가 어떤 의미지?)

아래의 TwitterModule도 TwitterApi를 인자로 받기에 associate 한다. 

2. Inject

@Inject 어노테이션으로 주입을 요청하면 연결된 Component가 Module로부터 객체를 생성해서 넘겨준다.

@Inject는 생성자, 메서드, 프로퍼티에 붙을 수 있다. 생성자, 프로퍼티 주입이 선호되는 편이다.

생성자 주입은 인스턴스 생성전에 이루어지고, 프로퍼티, 메서드 주입은 인스턴스 생성후 일어난다.

생성자에 @Inject 붙는 경우, 인스턴스가 생성될때 Dagger가 필요한 인자들은 가져온후 생성자를 호출할것이다. 

 

3. Component

Module, Inject 연결하는 다리

 

4. Subcomponent

Component에 계층관계를 만들 수 있다. Dagger의 중요한 개념인 그래프를 형성한다. Inject로부터 주입을 요청받으면 Subcomponent에서 먼저 의존성을 검색하고, 없으면 부모로 올라가면서 검색한다.

5. Scope

생성된 객체의 생명주기 범위이다. 안드로이드에서 Activity(iOS의 ViewController) Fragment 같은 화면의 생명주기에 맞추어 사용한다. 

 ex) @Singleton

 

 

 

장점

 

단점

 

 

출처

www.youtube.com/watch?v=plK0zyRLIP8

dagger.dev/dev-guide/

medium.com/@maryangmin/di-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%82%AC%EC%9A%A9%EB%B2%95%EA%B9%8C%EC%A7%80-dagger2-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-3332bb93b4b9

 

'dependency injection' 카테고리의 다른 글

Pure DI  (1) 2020.10.04
Dagger를 참고한 프로퍼티 래퍼를 이용한 DI  (0) 2020.10.04
Service Locator vs DI  (0) 2020.10.03
DI 컨테이너 장단점  (0) 2020.10.02