2017년 1월 13일 금요일

15. 의존성 주입(Dependency Injection)


정의
프로그래밍에서 구성요소간의 의존 관계가 소스코드 내부에서 만들어지는 것이 아닌 외부에서 생성되어 내부로 주입되도록 하는 패턴
 
 
목적
코드의 재사용성을 높이고 코드 변경 요청에 쉽게 대처할 수 있도록 기능에 따라 구조를 분리
 
Creater Injection
필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.
 
Setter Injection
의존성을 입력받는 세터(Setter) 메소드를 만들고 이를 통해 의존성을 주입한다.
 
Interface Injection
의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 실행시에 이를 통하여 의존성을 주입한다.
 
장점
의존 관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈들간의 결합도 를 낮출 수 있다.
코드 재사용을 높여서 작성된 모듈을 여러 곳에서 소스코드의 수정 없이 사용할 수 있다.
모의 객체 등을 이용한 단위 테스트의 편의성을 높여준다.
 
단점
외부로부터 받아오는 객체들이 증가함에 따라 코드가 복잡해지고, 이해하기 힘들어진다.
 

14. MVC 패턴(MVC Pattern)


정의
컴포넌트를 데이터를 저장하는 모델, 실제 사용자에게 보이는 뷰, 모델과 뷰 사이에서 중재자 역할을 하는 컨트롤러로 나누어 독립적인 역할을 부여하는 패턴
 

목적
코드의 재사용성을 높이고 코드 변경 요청에 쉽게 대처할 수 있도록 기능에 따라 구조를 분리
 
Model
패턴 내에서 사용되는 모든 데이터가 저장된 공간
ModelViewControl에 대해서 그 어떤 정보도 알지 못함
Controller로부터 받은 데이터를 가공, 처리
Observer 패턴을 이용해 모델이 변경되면 등록된 View, Controller에 변경사항을 공지한다.
 
View
사용자가 직접 보여져야할 디자인 부분
Model이나 Controller의 동작 방식은 알지 못하고 오직 받은 데이터를 화면에 구성시키는 일만을 진행
 
Controller
ModelView사이에서 입력받거나 읽어 들인 데이터를 보낼 목적지를 정하는 중재자
ModelView의 변경을 모니터링하고 상호 통보한다.
View의 사용자의 입력을 Command패턴을 이용해 위임받아 Model로 보낸다.
 
장점
컴포넌트가 기능별로 분리되어 코드의 재사용, 확장이 용이해져 유지보수가 편해진다.
하나의 모델로 여러 개의 뷰를 구성할 수 있다.
 
단점
뷰는 모델을 이용하기 때문에 서로간의 의존성을 완전히 지울 수 없다.

13. 컴포지트 패턴(Composite Pattern)


정의
객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만드는 패턴
 

 
목적
사용자로 하여금 개별 객체와 다른 객체들로 구성된 복합 객체의 차이를 알 필요 없이 같은 똑같은 객체로 취급하게 만듬
 
장점
개별 객체와 복합 객체를 똑같이 취급하므로 코드의 길이가 짧아진다.
새로운 종류의 구성요소를 쉽게 추가할 수 있다.
 
단점
새로운 구성요소의 추가는 쉬우나 복합체에 제약조건을 가하기 힘들다.
 

12. 이터레이터 패턴(Iterator Pattern)


정의
컬렉션 객체의 구성 방식과 관계없이 객체 내의 모든 요소들을 순차적으로 접근할 수 있는 기능을 제공하는 패턴
 

 
목적
컬렉션 객체의 내부 구조를 드러내지 않고 보관된 개체들에 대한 순차적 접근 방법 정의
 
장점
컬렉션의 종류에 구애받지 않고 사용할 수 있다.
집합 객체에 다양한 순회 방법을 정의할 수 있다.

11. 상태 패턴(State Pattern)


정의
클래스 내부의 상태의 변화에 따라 동일한 요청에 대하여 클래스가 취하는 행동 또한 변하는 패턴
 

 
목적
객체의 상태를 각각의 클래스로 캡슐화 하여 동적으로 행동을 교체할 수 있도록 한다.
 
장점
상용자는 자신의 행동에 의해 객체 내부에서 어떤 행동을 실행하는지 알 필요가 없다.
 
단점
상태마다 클래스를 생성해야해 상태가 많아지면 클래스의 수가 증가한다.
 
Strategy 패턴과의 차이점
State 패턴 객체 내부의 상태에 따라 현 상황에 맞는 행동이 실행
Strategy 패턴 사용자가 어떤 전략을 사용할지 직접 선택하여 행동을 실행
 

10. 템플릿 메소드 패턴(Template Method Pattern)


정의
상위 클래스에서는 알고리즘의 골격만을 미리 정의해 두고 각 단계에서 수행될 구체적인 행동은 서브클래스에서 구현하도록 한 패턴
 
 

목적
알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계의 행동을 재정의하여 사용한다.
 
장점
사용자가 직접 다루어야 할 객체의 수가 줄어든다.
사용자와 서브시스템간의 약한 결합도를 유지해 서브시스템의 추가가 쉽다.

09. 퍼사드 패턴(Facade Pattern)


정의
사용자에게 복잡한 과정은 드러내지 않고 일련의 하위 과정들을 아우르는 상위 수준의 인터페이스를 제공하여 하위 서비스들을 사용하기 쉽게 만든 패턴
 

 
목적
서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 상위 수준의 인터페이스를 제공
 
장점
사용자가 다루어야 할 객체의 수가 줄어든다.
사용자와 서브시스템간의 약한 결합도를 유지해 서브시스템의 다양화를 쉽게 합니다.

Adapter, Decorator와 차이점
Adpater 호환성을 위해 기존의 인터페이스를 사용하고자 하는 다른 인터페이스로 변환
Facade 복잡한 내부를 숨기고 간편하게 사용할 수 있도록 만들기 위해 인터페이스를 통합/단순화
Decorator 인터페이스를 변경하지 않고 객체를 새로운 객체로 감싸 행동을 동적으로 추가