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
Tags
more
Archives
Today
Total
관리 메뉴

혼자 있고 싶네요. 모두 나가주세요.

[Android]Dependency Injection 이란? 본문

타닥타닥/용어 정리

[Android]Dependency Injection 이란?

아무것도몰라양 2017. 9. 19. 20:09

Dependency Injection

프로그래밍에서 구성요소간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일 등을 통해 정의되게 하는 디자인 패턴 중의 하나이다. - 위키백과

한국어로 직역하면 의존성 주입이다. 살짝 간지 나는 것 같다.

적용 유형

마틴 파울러라는 분이 세 가지의 DI 패턴을 제시하셨다고 한다.

  1. 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.
  2. Setter를 통한 주입 : 의존성을 입력받는 세터(Setter) 메소드를 만들고 이를 통해 의존성을 주입한다.
  3. 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를 정의하는 과정이다.

 TextView textView = (TextView) findViewById(R.id.main_textview);

대표적으로 DI를 간편하게 해주는 Library로 Dagger가 있겠다.

'타닥타닥 > 용어 정리' 카테고리의 다른 글

Dagger2 이해하기  (0) 2017.09.26
Dagger1 vs Dagger2  (0) 2017.09.25
Comments