Dagger2란?
의존성 주입을 체계적으로 할 수 있도록 만들어진 프레임워크
의존성 주입이란
외부에서 의존 객체를 생성하여 넘겨주는 것을 의미합니다.
예를들어 A Class가 B Class를 의존할 때 B Object를 A가 직접 생성하지 않고
외부에서 생성하여 넘겨주면 의존성을 주입했다고 합니다.
DI를 위해서는 객체를 생성하고 넘겨주는 외부의 무언가가 필요합니다.
이것이 DI Framework가 하는 일입니다. 외부에서 넘겨주는 무언가를
스프링에서는 컨테이너,
Dagger에서는 Component와 Module이라고 부릅니다.
DI는 이렇게 의존성이 있는 객체의 제어를 외부 Framework로 올리면서
IoC 개념을 구현합니다. IoC는 Inversion of Control(제어의 역전)의 준말입니다.
의존성 주입에 필요한 요소
Dagger는 다음 5가지의 필수 개념이 있습니다.
- Inject
- Component
- Subcomponent
- Module
- Scope
하나씩 알아보겠습니다.
1.Inejct
의존성 주입을 요청합니다.
Inject 어노테이션으로 주입을 요청하면 연결된 Component가 Module로부터 객체를 생성하여 넘겨줍니다.
2. Component (Container)
연결된 Module을 이용하여 의존성 객체를 생성하고,
Inject로 요청받은 인스턴스에 생성한 객체를 주입합니다.
의존성을 요청받고 주입하는 Dagger의 주된 역할을 수행합니다.
3. Subcomponent
Component는 계층관계를 만들 수 있습니다.
Subcomponent는 Inner Class 방식의 하위계층 Component 입니다.
Sub의 Sub도 가능합니다. Subcomponent는 Dagger의 중요한 컨셉인 그래프를 형성합니다.
Inject로 주입을 요청받으면 Subcomponent에서 먼저 의존성을 검색하고,
없으면 부모로 올라가면서 검색합니다.
4. Module
Component에 연결되어 의존성 객체를 생성합니다.
생성 후 Scope에 따라 관리도 합니다.
5. Scope
생성된 객체의 Lifecycle 범위입니다.
안드로이드에서는 주로 PerActivity, PerFragment 등으로 화면의 생명주기와 맞추어 사용합니다.
Module에서 Scope을 보고 객체를 관리합니다.
위 5가지 개념을 따라 Dagger가 의존성을 주입하는 Flow는 다음과 같습니다.
출처 : https://kotlinworld.com/63?category=924584#Provider-Provides-
https://jaejong.tistory.com/131
'Android 공부 > DI ( 의존성 주입 )' 카테고리의 다른 글
Hilt ? (0) | 2022.05.16 |
---|---|
DI ) Dagger2의 5가지 필수 개념 (0) | 2022.04.26 |
[Android] DI Framework (Dagger2, Koin, Hilt) (0) | 2022.04.18 |
[Android] DI ?? (0) | 2022.04.18 |