본문 바로가기
배움의공간(學)/기타

[DP] GoF (Gang of Four)

by ㅋㅕㅋㅕㅇㅣ 2022. 12. 22.

 

생성 패턴 (Creational Pattern)

- 객체의 생성(creation)과 관련된 패턴 ⇒ 객체의 인스턴스 과정을 추상화하는 방법

- 객체의 생성과 참조 과정을 캡슐화 ⇒ 객체가 생성/변경 시 프로그램 구조에 영향을 받지 않도록 함

                                                          ⇒ 코드 유지를 쉽게 함 (유연성 높임)

- 범위:

  . 클래스 패턴: 객체 생성을 서브클래스에 위임하여 캡슐화 함

     ⇒ Factory Method

  . 객체 패턴: 객체 생성을 다른 객체에 위임

     ⇒ Abstract Factory: 인터페이스를 통해 연관된 객체들을 그룹으로 표현

     ⇒ Builder: 복합 객체의 생성과 표현을 분리하여 동일한 생성 절차에서도 다른 표현 결과를 만들어 낼 수 있음

     ⇒ Prototype: 원본 객체를 복사함으로써 객체를 생성함

     ⇒ Singleton: 어떤 클래스의 인스턴스는 하나임을 보장하고 어디서든 참조할 수 있도록 함

 

 

구조 패턴 (Structural Pattern)

- 클래스나 객체들을 조합(assemble)해 더 큰 구조로 만들 수 있게 해 주는 패턴

- 범위:

  . 클래스 패턴: 상속을 통해 클래스나 인터페이스를 합성

     ⇒ Adaptor: 클래스의 인터페이스를 다른 인터페이스로 변환하여 다른 클래스가 이용할 수 있도록 함

  . 객체 패턴: 객체를 합성하는 방법 정의

     ⇒ Adaptor: 상동

     ⇒ Bridge: 구현부에서 추상층을 분리하여 각자 독립적으로 확장할 수 있게 함

     ⇒ Composite: 객체들의 관계를 트리 구조로 구성하여 복합 객체와 단일 객체를 구분없이 다룸

     ⇒ Decorator: 주어진 상황 및 용도에 따라 어떤 객체에 다른 객체를 덧붙이는 방식

     ⇒ Facade: 서브시스템에 있는 인터페이스 집합에 대해 하나의 통합된 인터페이스(Wrapper) 제공

     ⇒ Flyweight: 크기가 작은 여러 개의 객체를 매번 생성하지 않고 공유를 통해 메모리를 절약

     ⇒ Proxy: 접근이 어려운 객체로의 접근을 제어하기 위해 객체의 Surrogate/Placeholder 제공

 

행위 패턴 (Behavioral Pattern)

- 클래스나 객체의 교류 방법에 대해 정의 ⇒ 서로 상호 작용하는 방법 (assigning responsibilities)

- 하나의 객체로 수행할 수 없는 작업을 여러 객체로 분배하여 결합도를 최소화 함

- 범위:

  . 클래스 패턴: 상속을 통해 알고리즘과 제어 흐름을 기술

     ⇒ Interpreter: 특정 언어의 문법 표현을 정의

     ⇒ Template Method: 상위클래스는 알고리즘의 골격만을 작성하고, 구체적 처리를 서브클래스로 위임

  . 객체 패턴: 하나의 작업을 수행하기 위해 객체 집합이 어떻게 협력하는지 기술

     ⇒ Chain of Responsibility: 요청을 받는 객체를 연쇄적으로 묶어,요청 처리 객체를 만날 때까지 Chain을 따라 요청 전달

     ⇒ Command: 요청을 객체의 형태로 캡슐화하여 재사용하거나 취소할 수 있도록 함

     ⇒ Iterator(반복자): 내부를 노출하지 않고 객체의 원소를 순차적으로 접근할 수 있는 동일 인터페이스 제공

     ⇒ Mediator(중재자): 한 집합에 속해 있는 객체들의 상호 작용을 캡슐화하여 새로운 객체로 정의

     ⇒ Memento: 객체가 특정 상태로 다시 되돌아올 수 있도록 내부 상태를 실체화

     ⇒ Observer: 객체 상태가 변할 때 관련 객체들이 그 변화를 통지받고 자동으로 갱신될 수 있게 함

     ⇒ State: 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용

     ⇒ Strategy: 동일 계열의 알고리즘군을 정의하고 캡슐화하여 상호교환이 가능하도록 함

     ⇒ Visitor(방문자): 객체의 원소에 대해 수행할 연산을 분리하여 별도의 클래스로 구성함

'배움의공간(學) > 기타' 카테고리의 다른 글

Stack overflow survey  (0) 2023.01.02
[DP] SOLID 원칙  (0) 2022.12.22
if(kakao) dev2022 을 보며  (0) 2022.12.08
[Microsoft] Learn .NET  (0) 2019.06.18
OpenSSL 라이브러리 빌드 (Visual Studio 2013)  (0) 2019.06.12

댓글