Image
Android/Dependency Injection

[Dagger2] 1. 의존성 주입과 Dagger2

앞의 글에서 의존성 주입이란 무엇인지. 왜 필요한지를 알게 되었다.

 

의존성 주입이란 무엇이며 왜 필요한가?

목표 의존성 주입이 무엇인지 이해한다. 의존성 주입이 왜 필요한지 이해한다. 의존성 주입이란?  의존성 주입이란 클래스간 의존성을 클래스 외부에서 주입하는 것을 뜻한다.  더 자세하게는

kotlinworld.com

이번 글에서는 이러한 의존성 주입을 쉽게 할 수 있도록 도와주는 프레임웍 Dagger2에 대해 살펴본다.

 

그 전에 앞의 글에서 의존성 주입을 위해 필요했던 사항을 살펴보도록 한다.

 

의존성 주입을 위해 필요한 사항

의존성

클래스간의 강한 의존성은 인터페이스화를 통해 약한 의존성을 가지도록 만들 수 있다.

그림1. 인터페이스화를 통한 의존성 약화

주입

클래스A에 의존성이 있는 클래스B의 인스턴스를 클래스A 내부에서 생성하는 것이 아니라 클래스A 외부(Container)에서 생성하여 주입 클래스A에 주입함으로써 클래스간 결합도를 약하게 만들 수 있다. 

그림2. 주입을 통한 결합도 약화

 

*위의 내용이 이해가 가지 않는다면 앞의 글을 먼저 읽고 오도록 하자.

 

Dagger2란

Dagger2란 의존성 주입을 체계적으로 할 수 있도록 만들어진 프레임웍이다. 따라서 위의 의존성 주입을 위한 필요 사항들을 쉽게 할 수 있도록 구현되어 있다. 

 

의존성 주입에 필요한 요소들

먼저 의존성 주입을 위한 필수 요소에 대응하는 Dagger2의 개념을 살펴보자. 

 

Container(Component)

먼저 주입(Injection)을 하기 위한 가장 기본적인 요소인 Container이다. Container은 외부에서 클래스의 인스턴스를 생성하는 공간이다. Dagger2에서는 이러한 Container을 Component라 부른다.

그림3. Dagger2 Component

 

Module

Module은 클래스의 인스턴스들을 모아놓는 공간으로 Component에 의존성을 제공하는 역할을 한다.

기존 IOC에는 Module이라는 개념이 없지만, Dagger에서는 특정 Container(Component)가 제공해야 하는 의존성이 Module 단위로 관리되어야 한다는 것이 편하다는 것을 고려하여 Module을 통해 클래스의 인스턴스들을 모듈 단위로 관리한다.

*Module : 특정 기능을 위한 코드의 묶음 예) 네트워크를 위한 코드의 묶음, DB 조작을 위한 코드의 묶음

 

그림4. Module

위의 그림4와 같이 하나의 Container에 Network Module과 Database Module이 들어갈 수 있다.

 

Provider(Provides)

Provider은 인스턴스를 제공(Provide)하는 역할을 한다. 즉, 주입부의 인스턴스를 제공하는 것이 바로 Provider이다. 

*Provider, Provide, Provides 모두 같은 의미로 쓰인다. 

*Provider는 그림5와 같이 모듈 단위로 관리된다.

그림5. Provider

 

 

정리

모든 의존성 주입 프레임웍에는 의존성 주입에 필수적인 요소들이 구현되어 있다. Dagger2에서도 마찬가지로 의존성 주입에 필수적인 요소들이 위와 같이 구현되어 있다.

 

Component, Module, Provider의 관계를 알았으면 다음 글에서 이것들을 이용해 어떻게 의존성을 주입하는지 살펴보도록 하자.

반응형

 

이 글의 저작권은 '조세영의 Kotlin World' 에 있습니다. 글, 이미지 무단 재배포 및 변경을 금지합니다.

 

 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com