Deperecated/Android_Weekly

<20.04.14> Android_Weekly #408

누알라리 2020. 4. 14. 17:18

1. Android Multi-Module & Dagger

https://proandroiddev.com/android-multi-module-dagger-a-real-use-case-step-by-step-bbc03500f2f9

 

Android Multi-Module & Dagger: a real use case, step by step

Start with a new project and arrive to a full Dagger multi-module integration. Step by Step excercise, with a real use case.

proandroiddev.com

프로젝트에 다른 모듈 Dependency를 integrate하기 위해 Dagger을 어떻게 써야하는지 알려주는 기사

 

1-1. What is Dagger?

이 사이트를 보며 공부함.  아래 모든 내용의 출처는 이 링크.

https://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

 

DI 기본개념부터 사용법까지, Dagger2 시작하기

여기서 말하는 Dagger는 모두 Square의 Dagger를 포크하여 Google이 만든 Dagger2를 뜻합니다.

medium.com

Dagger이란?

Dagger은 DI Framework.

DI란?

Dependency Injection(의존성 주입)

외부에서 의존 객체를 생성하여 넘겨주는 것(=주입)을 의미한다.

(위 링크의 이미지를 보면 쉽게 이해 가능)

 

DI를 위해서는 <외부에서 객체를 생성> 하여 <주입> 해주는 무언가 필요하고, 이를 DI Framework(Dagger)가 한다.

DI는 의존성 있는 객체의 제어를 외부 Framework에 맡기면서  IoC개념을 구현한다.

 

DI는 큰 개념, Dagger는 행동 대장, Dagger의 Component&Module은 행동 대장의 도구라고 생각하면됨.

IoC란?

Inversion of Control (제어의 역전)

DI는 IoC를 구현하는 방법 중 하나.

의존성있는 객체의 제어를 DI Framework가 해주니까 제어의 역전!

DI의 필요성

1) DI가 해주니까 Dependency들의 파라미터를 클래스 생성자에 작성하지 않아도 되므로 보일러 플레이트 코드(getter, setter) 코드를 많이 줄일 수 있다.

2) Interface에 구현체를 쉽게 교체하면서 상황에 따라 적절한 행동을 정의할 수 있다.

 

1-2. Details of Dagger

Dagger은 DI Framework 이다.
1. Inject
2. Component
3. Subcomponent
4. Module
5. Scope
5개의 필수 개념이 존재한다.

Inject

DI를 요청한다.

Inject 어노테이션으로 DI를 요청하면 연결된 Component가 Module로 부터 객체를 생성하여 넘겨준다.

 

Component

연결된 Module을 이용하여 Dependency 객체를 생성하고,

Inject로 요청받은 인스턴스에 생성한 객체를 주입(Injection)한다.

의존성을 요청하고 주입하는 Dagger의 주된 역할 수행.

 

Component를 만들 때 1. Scope 선언 2. 프로젝트 안의 Module 클래스들 중에서 연결할 모듈들을 선언

Subcomponent

Component는 계층 관계를 만들 수 있다.

Subcomponent는 Inner Class 방식의 하위계층 Component.

 

Subcomponent를 통해 Dagger의 중요 컨셉인 <<그래프>>를 형성한다.

Inject로 주입을 요청받으면 SubComponent에서 먼저 연결되어있는 Module들 속에 요청받은 Dependency가 있는지 검색하고, 없으면 부모로 올라가면서 검색한다.

 

Module

Component에 연결되어 의존성 객체(Dependency)를 생성한다.

생성 후 Scope에 따라 관리도 한다.

 

안드로이드 스튜디오 개발할 때 gradle 탭의 Module(Project)들이 있고 그 안에 Dependency { }안에 glide등 여러 라이브러리들이 선언되어있었다!

Scope

생성된 객체의 Lifecycle 범위.

안드로이드에서는 주로 PreActivity, PreFragment 등으로 화면의 생명주기와 맞추어 사용한다.

 

Module에서 Scope를 보고 객체를 관리한다.

 

1-3. Dagger가 의존성(Dependency) 주입(Injection)하는 Flow

 

출처: https://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

 

위 그림의 
1. Component들
아래 이미지의 UserComponent - Activity Component - Application Component 그래프

2. Component에 연결되어있는 Module들
아래 이미지의 User Module - Activity Module - Application Module

3. 생성된 Dependency 객체의 Scope
아래 이미지의 PerActivity - PerActivity - Singleton

 

출처 : https://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

 

Inject 어노테이션으로 의존성을 요청하면 SubComponent에서 부터 Module을 검색하고 Scope에 따라 의존성 객체를 가져와 주입한다.

 

다음 코드 예시는 위 링크의 코드들을 보도록 하자.

1-4. Dagger의 컨셉은 <그래프>

Dagger은 그래프가 주요 컨셉으로, Inject를 통해 요청받으면 Subcomponent, Component, inject의 생성자 순으로 검색하며 의존성 객체를 주입한다.

 

 

'Deperecated > Android_Weekly' 카테고리의 다른 글

<2020.04.17> Android_Weekly #408  (0) 2020.04.17
<2020.04.17> Android_Weekly #408  (0) 2020.04.17
<2020.04.12> Android_Weekly #408  (0) 2020.04.12
<2020.04.06> Android_Weekly #408  (0) 2020.04.06