생성 패턴 (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 |
댓글