의존성 주입 편집하기

IT위키

경고: 로그인하지 않았습니다. 편집을 하면 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) ==
== 의존성 주입 ==
IT위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 IT위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소 편집 도움말 (새 창에서 열림)