- 스트래티지 패턴 - 오리
알고리즘군을 정의하고 각각을 캡슐화하여 바꿔 쓸 수 있게 만듭니다.
스트래티지 패턴을 이용하면 알고리즘을 활용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있습니다.
* 교환 가능한 행동을 캡슐화하고 위임을 통해서 어떤 행동을 사용할지 결정합니다.
- 옵저버 패턴
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다.
* 상태가 변경되면 다른 객체들한테 연락을 돌릴 수 있게 해줍니다.
- 데코레이터 패턴 - 커피 옵션
객체에 추가요소를 동적으로 더할 수 있습니다.
데코레이터를 사용하면 서브클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있습니다.
* 객체를 감싸서 새로운 행동을 제공합니다.
- 추상 팩토리 패턴
서로 연관된, 또는 의존적인 객체들로 이루어진 제품군을 생성하기 위한 인터페이스를 제공합니다.
구상 클래스는 서브 클래스에 의해 만들어지죠.
* 클라이언트에서 구상 클래스를 지정하지 않으면서도 일군의 객체를 생성할 수 있도록 해줍니다.
- 팩토리 메소드 패턴
객체를 생성하귀 위한 인터페이스를 만듭니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하도록 합니다.
팩토리 메소드를 이용하면 인스턴스를 만드는 일을 서브클래스로 미룰 수 있습니다.
* 생성할 구상 클래스를 서브클래스에서 결정합니다.
- 싱글턴 패턴
클래스 인스턴스가 하나만 만들어지도록 하고, 그 인스턴스에 대한 전역 접근을 제공합니다.
* 딱 한 객체만 생성되도록 합니다.
- 커맨드 패턴 - 리모콘
요청내역을 객체로 캡슐화하여 클라이언트를 서로 다른 욫어 내역에 따라 매개변수화 할 수 있습니다.
요청을 큐에 저장하거나 로그로 기록할 수도 있고 작업취소 기능을 지원할 수도 있습니다.
* 요청을 객체로 감쌉니다.
- 어댑터 패턴
클래스의 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다.
인터페이스가 호환되지 않아 쓸 수 없었던 클래스들을 같이 사용할 수 있게 해줍니다.
* 객체를 감싸서 다른 인터페이스를 제공합니다.
- 퍼샤드 패턴
서브시스템에 있는 일련의 인터페이스에 대한 통합 인터페이스를 제공합니다.
퍼사드 패턴에서는 서브시스템을 더 쉽게 사용할 수 있게 해 주는 고수준 인터페이스를 정의합니다.
* 일련의 클래스에 대해서 간단한 인터페이스를 제공합니다.
- 템플릿 메소드 패턴
어떤 작업 알고리즘의 골격을 정의합니다.
일부 단계는 서브클래스에서 구현하도록 할 수 있습니다.
템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 특정 단계만 서브클래스에서 새로 정의하도록 할 수 있습니다.
* 알고리즘의 개별단계를 구현하는 방법을 서브클래스에서 결정합니다.
- 이터레이터 패턴
컬렉션을 표한하는 방법을 노출시키지 않으면서도 집합체 내에 있는 모든 객체들에 하나씩 접근하는 방법을 제공합니다.
* 컬랙션이 어떤식으로 구현되었는지 드러내진 않으면서도 컬렉션 내에 있는 모든 객체에 대해 반복작업을 처리할 수 있게 해줍니다.
- 컴포지트 패턴
객체들을 트리 구조로 구성하여 부분-전체 계층구조를 구현합니다.
컴포지트 패턴을 이용하면 클라이언트에서 개별 객체와 복합 객체를 똑같은 방법으로 다루도록 할 수 있습니다.
* 클라이언트에서 객체 컬렉션과 개별 객체를 똑같이 다룰 수 있도록 해 줍니다.
- 스테이트 패턴
내부 상태가 바뀜에 따라 객체의 행동이 바뀔 수 있도록 해 줍니다.
마치 객체의클래스가 바뀌는 것 같은 결과를 얻을 수 있습니다.
* 상태를 기반으로 한 행동을 캡슐화한 다름 위임을 통해서 필요한 행동을 선택합니다.
- 프록시 패턴
다른 객체를 대변하는 객체를 만들어서 주 객체에 대한 접근을 제어할 수 있습니다.
* 객체를 감싸서 그 객체에 대한 접근을 제어합니다.
- 컴파운드 패턴 - MVC
두 개 이상의 패턴을 결합하여 일반적으로 자주 등장하는 문제들에 대한 해법을 제공합니다.
'Other > OOP' 카테고리의 다른 글
객체지향(OOP) paste (0) | 2012.09.14 |
---|---|
interface 를 왜 사용하는가 (0) | 2012.09.14 |