반응형
출처 : 코드, 패턴 그리고 소프트웨어(지은이 포인트) - https://wikidocs.net/book/55
# 디자인 패턴
- 방식을 통해 소프트웨어 설계에서 얻은 세세한 경험들을 기록해 놓도록 하는 것
- 패턴 "어떤 상황의 문제에 대한 해법"
- 패턴의 4가지 요소
- 이름 (pattern name)
- " 한 두단어로 설계 문제와 해법을 서술"
- 설계 어휘를 늘리는 일
- 추상화된 설계 가능
- 설계 의도 표현
- 개발자 간의 의사소통 도움
- 문제 (problem)
- "언제 패턴을 사용하는 가를 서술하며 해결할 문제와 그 배경을 설명"
- 설계의 세밀한 문제
- 해법 (solution)
- "설계를 구성하는 요소들과 그 요소들 간의 관계 책임 그리고 협력 관계를 서술"
- 패턴은 다양한 경우에 적용할 수 있는 템플릿(template)이기 떄문에, 구체적인 설계나 구현을 해법에서 제시하지 않는다.
- 추상적인 설명을 제공하며, 클래스나 객체들의 나열 방법을 제공
- 결과 (consequence)
- "패턴을 적용해서 얻는 결과와 장단점을 서술"
- 비용과 효과를 측정하는 과정에서 설계의 결과를 고려
- 소프트웨어에서 결과란 시간이나 공간사이의 균형을 의미
- 시간복잡도와 공간복잡도
- 시간 vs 공간 에 따라서 설계 방법을 채택
- 재사용 - 객체 지향 설계의 주요 요소
- 패턴의 결과
- 시스템의 유연성, 확장성, 이식성에 큰 영향.
- 그렇다면 디자인 패턴이란 ? - "특정한 전후 관계에서 일반적 설계 문제를 해결하기 위해 상호 교류하는 수정 가능한 객체와 클래스들에 대한 설명"
# 디자인 패턴 이름의 분류
- 패턴의 생명이자 핵심을 간결하게 전달하는 부분.
|
- 패턴을 분류하는 두가지 기준
- 목적(Purpose), 범위(scope)
- 목적의 분류
- 생성 (creational) 패턴 : 객체의 생성 과정에 관여하는 패턴
- 구조 (structural) 패턴 : 클래스나 객체의 합성에 관한 패턴
- 행동 (behavioral) 패턴 : 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴
- 범위의 분류
- 클래스 패턴 : 클래스와 서브 클래스 간의 관련성을 다루는 패턴, 주로 상속, 컴파일 타임에 정적으로 결정됨
- 객체 패턴 : 객체 관련성을 다루는 패턴으로, 런타임에 변경할 수 있고 동적인 성격을 가짐.
구분 | 목적 | |||
생성 | 구조 | 행동 | ||
범위 | 클래스 | Factory Method - 팩토리 메서드 | Adapter - 어댑터(class) | Interpreter - 인터프리터 Template Method - 템플릿 메서드 |
객체 | Abstract Factory - 추상 팩토리 Builder - 빌더 Prototype - 프로토타입 Singleton - 싱글톤 | Adapter - 어댑터(object) Bridge - 브릿지 Composite - 컴포짓 Decorator - 데커레이터 Facade - 퍼사드 Flyweight - 플라이웨이 Proxy - 프록시 | Chain of Responsibility 책임 연쇄 Command - 커맨드 Interpreter - 인터프리터 Mediator - 중재자 Memento - 메멘토 Observer - 옵저버 State - 상태 Strategy - 전략 Visitor - 비지터 |
- 생성(creational) "클래스" 패턴 - 객체를 생성하는 책임의 일부를 서브클래스가 담당하도록 넘김
- 생성(creational) "객체" 패턴 - 이를 다른 객체에게 위임
- 구조(structural) "클래스" 패턴 - 상속을 이용해서 클래스를 복합
- 구조(structural) "객체" 패턴 - 객체를 합성하는 방법을 정의
- 행동(behavioral) "클래스" 패턴 - 상속을 이용해서 알고리즘과 제어 흐름을 기술
- 행동(behavioral) "객체" 패턴 - 하나의 작업을 수행하기 위해 객체 집합이 어떻게 협력하는 지를 기술
# 디자인 패턴 카탈 로그
- 카탈로그란? : 상품 안내서, 목록, 요람, 등의 뜻으로 볼 수 있다.
- 관련 자료로 디자인쪽의 카탈로그와 브로슈어, 팸플릿, 리플릿에 관해 게시한 블로그 : http://daver.kr/xe/178409
- 그렇다면 목록 쯤으로 볼 수 있겠다.
- 목록
[1]생성 패턴 Abstract Factory - 추상 팩토리 : 구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴 Builder - 빌더 : 복합 객체의 생성 과정과 표현방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴 Factory Method - 팩토리 메서드 : 객체를 생성하는 인터페이스는 미리 정의하되, 인스턴스를 만들 클래스의 결정은 서브클래스 쪽에서 내리는 패턴 팩토리 메서드 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브 클래스로 미룬다. Prototype - 프로토타입 : 생성할 객체의 종류를 명세화하는 데에 원형이 되는 예시물을 이용하고, 그 원형을 복제함으로써 새로운 객체를 생성하는 패턴 Singleton - 싱글톤 : 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴 [2]구조 패턴 Adapter - 어댑터 : 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 함 Bridge - 브릿지 : 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴 Composite - 컴포짓 : 객체들의 관계를 트리 구조로 구성하여 부분-천체 계층을 표현하는 패턴으로 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다. Decorator - 데커레이터 : 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸수 있는 유연한 대안 Facade - 퍼사드 : 서브 시스템에 있는 인터페이스 집합에 대해서 하나의 통합된 인터페이스를 제공하는 패턴으로, 서브시스템을 좀더 사용하기 편하게 만드는 상위 수준의 인터페이스를 정의 Flyweight - 플라이웨이 : 크기가 작은 객체가 여러개 있을 때, 공유를 통해 이들을 효율적으로 지원하는 패턴 Proxy - 프록시 : 어떤 다른 객체로 접근하는 것을 통제하기 위해서 그 객체의 대리자(surrogate)또는 자리채움자(Placehoder)를 제공하는 패턴 [3]행동 패턴 Chain of Responsibility - 책임 연쇄 : 요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여하여 요청을 보내는 객체와 그 요청을 받는 객체 사이의 결합을 피하는 패턴 요청을 받을 수 있는 객체를 연쇄적으로 묶고, 실제 요청을 처리할 객체를 만날 때까지 객체 고리를 따라서 요청을 전달합니다 Command - 커맨드 : 요청을 객체의 형태로 캡슐화하여 서로 요청이 다른 사용자의 매개변수화, 요청 저장 또는 로깅, 그리고 연산의 취소를 지원하게 만드는 패턴 Interpreter - 인터프리터 : 주어진 언어에 대해 그 언어의 문법을 위한 표현 수단을 정의하고 이와 아울러 그 표현 수단을 사용하여 해당 언어로 작성된 문장을 해석하는 해석기를 정의하는 패턴 Iterator - 이터레이터 : 내부 표현부를 노출하지 않고, 어떤 객체 집합에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공 Mediator - 중재자 : 한 집합에 속해있는 객체들의 상호작용을 캡슐화하는 객체를 정의하는 패턴 객체들이 직접 서로 참조하지 않도록 함으로써 객체들 사이의 소결합(loose coupling)을 촉진 시키며, 개발자가 객체들의 상호작용을 독립적으로 다양화시킬 수 있게 만든다. Memento - 메멘토 : 캡슐화를 위해받지 않은 채 어떤 객체의 내부 상태를 잡아내고 실체화 시켜 이후에 해당 객체가 그 상태로 다시 되돌아올 수 있도록 하는 패턴 Observer - 옵저버 : 객체 사이에 일 대 다의 의존관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체의 의존성을 가진 다른 객체들이 그 변화를 통지 받고 자동으로 갱신 될 수 있게 만드는 패턴 State - 상태 : 객체의 내부 상태에 따라 스스로 행동을 변경할 수 있게 끔 허가하는 패턴으로 이렇게 하면 객체는 마치 자신의 클래스를 바꾸는 것처럼 보임 Strategy - 전략 : 동일 계열의 알고리즘 군을 정의 하고 각각의 알고리즘을 캡슐화하며 이들을 상호교환이 가능하도록 만드는 패턴 알고리즘을 사용하는 사용자와 상관없이 독립적으로 알고리즘을 다양하게 변경할수 있게 한다. Template Method - 템플릿 메서드 : 객체의 연산에는 알고리즘의 뼈대만을 정의하고 각 단게에서 수행할 구체적 처리는 서브 클래스 쪽으로 미루는 패턴 알고리즘의 구조 자체는 그대로 놔둔채 알고리즘 각 단계의 처리를 서브클래스에서 재정의 할 수 있게 한다. Visitor - 비지터 : 객체 구조를 이루는 원소에 대해 수행할 연산을 표현하는 패턴 연산을 적용할 원소의 클래스를 변경하지 않고도 새로운 연산을 정의할수 있게 함 |
반응형
'Programming' 카테고리의 다른 글
Programming/어셈블리어 종류 정리 (0) | 2018.04.09 |
---|