일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Rx자바
- RX
- RXjava
- Switch to the Play Referrer API by March 1
- deprecating the install_referrer
- hardcoded string search
- android P
- RxJava2
- Retrofit2
- java
- Android
- 하드코드검색
- 안드로이드
- andorid studio
- rxandroid
- Today
- Total
Lucky Dog
[기타] 제어의 역전, 의존성 주입 (IoC, DI) 본문
의존성 주입 (DI : Dependency Injection)
의존성 주입(Dependency Injection, DI)은 프로그래밍에서 구성요소간의 의존 관계가 소스코드 내부가 아닌 외부의
설정파일 등을 통해 정의되게 하는 디자인 패턴 중의 하나이다.
아래 예시와 같이 인스턴스를 전달하는 것
예시
일반적인 경우 B--->A (B는 A에 의존성이 있다.)
class A { public void doSomthing() { B b = new B(); b.showAnything(); } } |
의존성 주입 (setter 를 통한 주입)
class A { B b; public void setB(B b) { this.b = b; } public void doSomthing() { b.showAnything(); } } |
의존성 주입 유형
- 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.
- 세터(Setter)를 통한 주입 : 의존성을 입력받는 세터(Setter) 메소드를 만들고 이를 통해 의존성을 주입한다. (위 테스트 케이스)
- 인터페이스(Interface)를 통한 주입 : 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 실행시에 이를 통하여 의존성을 주입한다.
의존성 주입의 장점
- 결합도 낮음 : 의존 관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈들간의 결합도 를 낮출 수 있다.
- 재사용성 : 코드 재사용을 높여서 작성된 모듈을 여러 곳에서 소스코드의 수정 없이 사용할 수 있다.
- 테스트 편의성 : 모의 객체 등을 이용한 단위 테스트의 편의성을 높여준다.
의존성 주입의 단점
- 런타임에서 에러가 발생할 수 있다. (컴파일 단계에서 캐치하지 못하는 경우 생김)
제어의 역전 (IoC : Inversion of Control)
프로그래머가 작성한 프로그램이 재사용 라이브러리의 흐름 제어를 받게 되는 소프트웨어 디자인 패턴을 말한다.
전통적인 프로그래밍에서 흐름은 프로그래머가 작성한 프로그램이 외부 라이브러리의 코드를 호출해 이용한다.
하지만 제어 반전이 적용된 구조에서는 외부 라이브러리의 코드가 프로그래머가 작성한 코드를 호출한다.
위 의존성주입(DI) 과정 자체가 제어의역전(IoC) 이다