경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
편집을 취소할 수 있습니다.
이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
| [[분류:소프트웨어 공학]] | | [[분류:소프트웨어 공학]][[분류:프로그래밍]] |
| [[분류:프로그래밍]] | |
| | |
| ;Dependency Injection | | ;Dependency Injection |
|
| |
|
| ==의존성== | | == 의존성 == |
| | | * 아래는 객체지향 프로그래밍에서 아주 흔히 쓰이는 형태의 클래스 및 메소드의 구현 예이다. |
| *아래는 객체지향 프로그래밍에서 아주 흔히 쓰이는 형태의 클래스 및 메소드의 구현 예이다. | |
| <pre> | | <pre> |
| public class TestClass { | | public class TestClass { |
16번째 줄: |
13번째 줄: |
| } | | } |
| </pre> | | </pre> |
| | * TestClass의 testMethod에선 내부적으로 OtherClass라는 클래스를 사용한다. |
| | ** OtherClass의 인스턴스에 Data를 설정하고 Data를 불러온다. |
| | * 만약 OtherClass가 변경되어 더 이상 setData 라는 메서드를 지원하지 않는다면 에러가 발생하게 된다. |
| | * '''이때 TestClass는 OtherClass에 의존성이 있다고 표현한다.''' |
| | ** OtherClass를 TestClass의 '''[[의존성|의존성(Dependancy)]]'''이라고 표현하기도 한다. |
|
| |
|
| *TestClass의 testMethod에선 내부적으로 OtherClass라는 클래스를 사용한다.
| | == 의존성 문제 == |
| **OtherClass의 인스턴스에 Data를 설정하고 Data를 불러온다.
| | * 의존성은 강한 [[결합도]]를 야기한다. |
| *만약 OtherClass가 변경되어 더 이상 setData 라는 메서드를 지원하지 않는다면 에러가 발생하게 된다.
| | * 의존성은 모듈의 수정을 어렵게 한다. |
| *'''이때 TestClass는 OtherClass에 의존성이 있다고 표현한다.'''
| | * 의존성은 테스트를 어렵게 한다. |
| **OtherClass를 TestClass의 '''[[의존성|의존성(Dependancy)]]'''이라고 표현하기도 한다.
| |
| | |
| ==의존성 문제== | |
| | |
| *의존성은 강한 [[결합도]]를 야기한다. | |
| *의존성은 모듈의 수정을 어렵게 한다. | |
| *의존성은 테스트를 어렵게 한다. | |
| | |
| ==의존성 주입의 장점==
| |
| '''클라이언트 관점'''
| |
| {| class="wikitable"
| |
| !구분
| |
| !설명
| |
| |-
| |
| |종속성의 감소
| |
| (Reduced Dependencies)
| |
| |
| |
| *컴포넌트의 종속성이 감소하면 변경에 민감하지 않게 됨
| |
| |-
| |
| |결합도 감소
| |
| (Reduced coupling)
| |
| |
| |
| *결합도를 낮추어 주면서 유연성과 확장성을 향상
| |
| |-
| |
| |재사용성 증가
| |
| (More Reusable Code)
| |
| |
| |
| *인터페이스의 구현 변경 필요한 경우, 코드 변경 없이 해당 구현을 사용하도록 컴포넌트 구성 가능
| |
| |}
| |
| '''코드 관점'''
| |
| {| class="wikitable"
| |
| !구분
| |
| !설명
| |
| |-
| |
| |테스트 케이스 생성 용이
| |
| (More Testable Code)
| |
| |
| |
| *실제 구현의 테스트로 사용되는 Mock 객체 활용
| |
| | |
| *의존성을 컴포넌트에 주입할 수 있는 경우 단위 테스트 편의성을 높여준다
| |
| |-
| |
| |코드 가독성 향상
| |
| (More Readable Code)
| |
| |
| |
| *컴포넌트의 종속성을 보다 쉽게 파악할 수 있으므로 코드를 쉽게 읽을 수 있다.
| |
| |-
| |
| |코드 단순화
| |
| Simplify code)
| |
| |
| |
| *의존 관계 제거와 사용 관점의 단순화로 프로그램 코드 전체의 단순화
| |
| |}
| |
| | |
| ==의존성 주입 방법==
| |
| {| class="wikitable"
| |
| !방법
| |
| !설명
| |
| |-
| |
| |생성자 사용
| |
| (Constructor Injection)
| |
| |
| |
| *필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통한 의존성을 주입
| |
| |-
| |
| |세터(Setter)를 통한 주입
| |
| (Method(Setter) Injection)
| |
| |
| |
| *의존성을 입력받는 Setter 메소드를 만들고 이를 통한 의존성을 주입
| |
| |-
| |
| |인터페이스(Interface)를 통한 주입
| |
| (Field Injection)
| |
| |
| |
| *의존성을 주입하는 함수를 포함한 인터페이스를 작성
| |
| *이 인터페이스를 구현하도록 함으로써 실행 시에 이를 통하여 의존성을 주입
| |
| |}
| |
| | |
| == 참고 문헌 ==
| |
|
| |
|
| * 정보관리기술사 123회 하나둘셋 동기회 기출풀이집
| | == 의존성 주입(IoC) == |
| | == 의존성 주입 == |