2017년 1월 13일 금요일

08. 어댑터 패턴(Adapter Pattern)


정의
기존 인터페이스가 사용하고자 하는 인터페이스와 호환되지 않을 때 기존 인터페이스를 어댑터로 감싸 사용하고자 하는 다른 인터페이스로 변환하여 사용 가능하도록 만드는 패턴
 

 
 
목적
서로 다른 구조를 가지는 인터페이스를 연결하여 호환 가능하도록 함
 
클래스 Adapter
장점
Adapter 전체를 다시 구현할 필요가 없으며 행동을 오버라이드할 수 있다.
 
단점
상속을 사용하기 때문에 특정 Adaptee에만 적용되어 유연성이 떨어진다.
객체 Adapter
장점
구성을 사용하기 때문에 Adaptee클래스 뿐만 아니라 서브 클래스에 대해서도 Adapter 역할이 가능하다
 
단점
Adaptee가 Adapter 클래스의 대부분의 코드를 구현해야 하여 코드의 양이 늘어나게 된다.
 

07. 커맨드 패턴(Command Pattern)


정의
사용자가 요구하는 명령어를 객체에 캡슐화 하여 저장하고, 저장된 명령에 대해서 redo, undo의 기능을 제공하는 패턴
 

 
목적
명령을 요구하는 객체와 그 요청을 수행하는 객체의 분리
 
장점
요청 내역을 큐에 저장, 로그로 기록, 작업 취소 기능도 지원
 
단점
객체 구성 부분이 추가되면 추상부분부터 수정하여 추가해야한다.

06. 싱글톤 패턴(Singleton Pattern)


정의
객체가 전체 프로그램 내에서 단 하나만 존재하여야 할 때 인스턴스가 하나 뿐인 객체를 제공하는 패턴
 
 
목적
어디서든 접근 가능한 유일한 인스턴스를 제공
 
장점
객체가 사용되기 전까지 생성을 지연시켜 static에 비하여 자원 낭비가 적다.
 
단점
Singleton 패턴이 글로벌 인스턴스로써 사용될 때 인터페이스가 아닌 코드에 의존하게 된다.
singleton 패턴은 인스턴스가 스스로 생성과 소멸을 제어하기 때문에 single responsibility principle(단일 책임 원칙)에 위배된다.
 
- single responsibility principle(단일 책임 원칙) - 하나의 클래스마다 하나의 행동만을 두어 다른 클래스와의 의존도를 낮추고 코드 수정이 용이하게 한다.(클래스를 변경하는 이유는 단 한가지여야 한다.

05. 추상 팩토리 패턴(Abstract Factory Pattern)


정의
객체 내에서 구체적인 메소드를 정의하지 않고 메소드의 구성은 서브 클래스로 미루어 서로 연관된 객체 군을 생성하는 패턴
 

 
목적
서로 연관성을 가지는 다양한 객체들의 생성을 하나의 팩토리에서 관리
 
장점
구체적인 구현 클래스를 사용자로부터 분리시킨다.
 
단점
새로운 종류의 제품을 추가하기 위해서는 abstract factory와 이에 의존하고 있는 모든 서브 클래스들을 수정해야 한다.
 
Factory Method와의 차이점
Factory Method – 상속을 이용해 객체를 생성, 클래스의 확장과 메소드의 오버라이드를 이용, 사용자가 요구하는 실제 제품을 만든다.
Abstract Factory – 객체 구성을 이용, 제품군을 만들기 위한 추상, 제품을 생산하기 위한 공장(객체)을 만든다.

04. 팩토리 메소드 패턴(Factory Method Pattern)


정의
객체를 생성하기 위한 Interface만을 미리 정의해 두고 실제 인스턴트를 생성하는 일을 서브클래스에 위임하는 패턴
 
 
 
목적
하위 클래스에 객체 생성의 책임을 넘겨주어 객체의 생성과 객체의 사용을 분리시킨다.
 
장점
객체의 생성을 한 클래스에서 관리할 수 있다.
제품을 생성하는 부분과 사용하는 부분이 분리된다.
 
단점
생성할 객체의 종류가 달라질 때 마다 새로운 하위 클래스를 정의해야 한다.
 

03. 데코레이터 패턴(Decorator Pattern)


정의
기존 객체를 변형하는 것이 아니라 기능 추가가 필요할 때 새로운 Decorator 객체로 기존 객체를 감싸 행동을 동적으로 추가할 수 있도록 만든 패턴
 

 
목적
실제 상속으로 서브클래스를 계속 만드는 방법이 효율적이지 못할 때 다른 객체에 영향을 주지 않고 행동을 추가하기 위하여 사용
객체의 기본적인 기능과 그 기능을 꾸며주는 객체를 완전히 분리시키는 패턴
 
장점
런타임 도중에 Decorator를 객체와 연결하는 방식을 통하여 새로운 행동을 추가할 수 있다.
Decorator 패턴은 특정 행동이 필요할 때 그 행동을 추가함으로써 현시점에 불필요한 요소의 개발을 최소화 할 수 있다.
 
단점
Decorator를 사용하다보면 작은 규모의 잡다한 객체들이 많아질 수 있다.
Decorator내부에 특정 객체가 포함되어 있는지 식별해내기 힘들다.

02. 옵저버 패턴(Observer Pattern)


정의
주제 객체의 상태가 바뀔 때 마다 그 객체에 의존하는 모든 Observer객체가 변경 내용을 통지받고 지니고 있던 값을 자동으로 갱신하는 패턴.
 

 
목적
주제 객체의 상태가 변하면 이 객체에 의존하는 모든 Observer 객체들이 해당 상태변화를 통지받아 인지할 수 있도록 객체들 간의 one-to-many 의존관계를 정의
 
Push 방식 – 주제 객체의 상태가 변경될 때 마다 의존하고 있는 모든 Observer 객체들에게 공지
Pull 방식 – 주제 객체에 의존하는 Observer가 갱신된 상태에 대한 정보가 필요할 때 getter를 이용하여 주제 객체로부터 갱신된 데이터를 수령
 
장점
주제 객체와 Observer 객체간의 loose coupling을 통해 객체의 변경에 유연하게 대처할 수 있다.
주제 객체에 Observer의 등록/탈퇴가 자유롭다.
 
단점
상태가 변경되었다는 사실만을 주고받기 때문에 여러 주제객체에 의존하는 Observer의 경우 동일한 값의 변경에 대하여 반복적인 갱신이 이루어질 수 있다.