혼자 있고 싶네요. 모두 나가주세요.
[Android]Dependency Injection 이란? 본문
Dependency Injection
프로그래밍에서 구성요소간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴 중의 하나이다. - 위키백과
한국어로 직역하면 의존성 주입이다. 살짝 간지 나는 것 같다.
적용 유형
마틴 파울러라는 분이 세 가지의 DI 패턴을 제시하셨다고 한다.
- 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.
- Setter를 통한 주입 : 의존성을 입력받는 세터(Setter) 메소드를 만들고 이를 통해 의존성을 주입한다.
- Interface를 통한 주입 : 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 실행시에 이를 통하여 의존성을 주입한다.
결국 DI는 외부 소스를 통해서 진행 하는데, 유형이라 함은 DI를 언제 어디서 어떻게 진행할 것인지에 따라 분류한 것이다.
DI의 장점
- 의존 관계의 설정을 컴파일시 수행하는 게 아니라 코드 내에서 이루어 지기 때문에 모듈간의 결합도를 낮출 수 있다.
- 코드 재사용을 높여서 작성된 모듈을 여러 곳에서 소스코드의 수정 없이 사용할 수 있다.
- 모의 객체(Mock Object) 등을 이용한 단위 테스트의 편의성을 높여준다.
Android에서의 Dependency Injection
처음 DI의 개념을 보자 마자 생각 난 것은 ViewPager와 각 페이지에 속하는 Fragment들이다.
Fragment들의 효율적인 사용을 위해서 ViewPager의 페이지가 이동할 때 마다 재생성을 하기보다는 MainViewPager에서 Fragment의 Instance를 생성하고, 저장해 두었다가 이를 필요할 때마다 꺼내어 주는 방법을 사용하기도 하는데, 이것이 작은 의미의 DI라고 생각한다.
각 Activity 혹은 Fragment에서 서로 의존 관계를 가지려면 Context를 교환하여야 하는데, 이를 위에서 제 3자 시점의 절대자가 모두 알고 있다면 각 Fragment는 서로의 Instance를 생성해서 참조하는 수고를 덜게 된다. 이처럼 객체가 제 3자에 의해 정의 당하는 것을 의존 관계의 역전(Inversion Of Control)이라고 한다.
생각해 보니 Android 개발을 하면서 밥을 먹듯이 하는 DI가 있는데, 바로 XML의 리소스를 불러와 View를 정의하는 과정이다.
대표적으로 DI를 간편하게 해주는 Library로 Dagger가 있겠다.
'타닥타닥 > 용어 정리' 카테고리의 다른 글
Dagger2 이해하기 (0) | 2017.09.26 |
---|---|
Dagger1 vs Dagger2 (0) | 2017.09.25 |