목록Design Patterns (15)
mojo's Blog
Bridge Pattern 목적: 구현 객체 구조와 독립적인 추상 객체 구조를 정의하여 결합을 제한한다.사용 시기- 추상화와 구현이 컴파일 시점에 묶여서는 안됨- 추상화와 구현이 독립적으로 확장 가능- 추상의 구현 변경이 클라이언트에 영향을 주어서는 안됨- 구현 세부 사항은 클라이언트로부터 숨겨져야 함 ※ Initial Problem간단한 그림 그리기 프로그램이 있다고 가정한다.(1) 사각형을 그릴 수 있음(2) 두 가지 그림 라이브러리 중 하나를 사용할 수 있음 설정에 따라 그림 프로그램 1(DP1) 또는 그림 프로그램 2(DP2) 사용이 결정됨 DP1: draw_a_line(x1, y1, x2, y2) DP2: drawline(xy, x2, y1, y2) 추상 클래..
Composite Pattern - 목적 각 객체를 동일한 인터페이스를 통해 독립적으로 또는 중첩 객체 집합으로 처리할 수 있는 객체 계층을 쉽게 만들 수 있음- 사용시기 객체의 계층적 표현이 필요함 물체 및 물체의 구성은 균일하게 처리되어야 함 ※ Hierarchical structure Menu 와 Menu 내에 존재하는 MenuItem 들에 대한 계층적 구조로는 위와 같다.root 노드에는 All Menu로 하위 노드에 각 메뉴들이 연결되어 있다.leaf 노드에는 각 메뉴의 아이템으로 특정 메뉴 노드와 연결되어 있다.위와 같은 트리 구조를 균일하게 접근하기 위해서는 Compositie pattern 을 사용해야 한다. ※ Component Classpublic class Menu..
Adapter Pattern - 목적 서로 다른 인터페이스를 가진 클래스가 통신하고 상호 작용할 수 있는 공통 객체를 만들어 함께 작동할 수 있도록 허용하는 것- 사용시기 사용할 클래스가 인터페이스 요구 사항을 충족하지 않을 때 ※ Mechanism- 클라이언트가 대상 인터페이스를 사용하여 어댑터의 메서드를 호출하여 어댑터에 요청- 어댑터가 어댑터 인터페이스를 사용하여 요청을 어댑터에 대한 하나 이상의 호출로 변환- 클라이언트는 통화 결과를 수신하고 번역을 수행하는 어댑터가 있는지 전혀 알지 못함 ※ Object Adapter v.s. Class AdapterObject Adapter는 object composition 및 delegation 을 사용한다.Class Adapter는 상속을 사..
Decorator Pattern 목적: 객체의 기존 책임과 동작을 수정하기 위해 객체를 동적으로 감쌀 수 있음사용시기- 객체 책임과 행동은 동적으로 수정할 수 있어야 함- 구체적인 구현은 책임과 행동으로부터 분리되어야 함- 수정을 달성하기 위한 하위 분류는 비현실적이거나 불가능함- 특정 기능은 객체 계층에서 상위에 위치해서는 안됨- 구체적인 구현을 둘러싼 많은 작은 객체가 허용 ※ Design Principle: OCPOCP- 클래스는 확장을 위해 열려 있어야 하지만 수정을 위해 닫혀 있어야 함- 기존 코드를 수정하지 않고 새로운 동작을 통합하기 위해 클래스를 쉽게 확장할 수 있어야 함- 변화에 탄력적이며 변화하는 요구 사항을 충족하기 위해 새로운 기능을 담당할 수 있을 정도로 유연함 주의할 점: 모든 ..
Singleton Pattern 목적: 시스템 내에서 클래스 객체가 하나만 허용되도록 함사용시기- 클래스의 객체가 정확히 하나 필요함- 단일 객체에 대한 제어된 접근이 필요함 ※ One of a Kind Objects오직 하나의 객체로 관리되어야 할 것들- Window Manager- Thread Pool Manager- Caches- Logging 하나의 객체 관리가 왜 어려울까?- Multi-threading 문제- 글로벌 변수를 생각해보기 ※ The Skeleton of Singletonpublic class Singleton { private static Singleton uniqueInstance; // other useful instance variables privat..
Builder Pattern 목적: 쉽게 상호 교환할 수 있는 알고리즘 기반으로 객체를 동적 생성사용시기- 생성 프로세스에 대한 런타임 제어 필요- 생성 알고리즘의 여러 표현이 필요- 객체 생성 알고리즘을 시스템에서 분리- 핵심 코드를 변경하지 않고 새로운 생성 기능을 추가 ※ Structure - Director: 최종 제품에 필요한 부품이 무엇인지를 알고 있다.- Concrete builder: 부품을 생산하고 최종 제품에 추가하는 방법을 알고 있다. ※ Participants(1) Client 제품을 제작할 director, concrete builder를 선택함 concrete builder에게 최종 시공된 제품을 반환하도록 요청함(2) Director 제품을 만드는 데..