디자인패턴 GOF
패턴 디자인 GOF 정리표
디자인패턴 GOF
GOF 패턴
1. 생성 패턴 (Creational Patterns)
객체의 생성 과정을 추상화하여, 객체가 생성되거나 표현되는 방식과 독립적으로 시스템을 구성할 수 있도록 돕는 패턴입니다.
| 패턴명 (영문) | 핵심 요약 및 목적 |
|---|---|
| 추상 팩토리 (Abstract Factory) | 구체적인 클래스에 의존하지 않고, 연관되거나 의존적인 객체들의 패밀리(그룹)를 생성할 수 있는 인터페이스를 제공합니다. |
| 빌더 (Builder) | 복잡한 객체의 생성 단계와 표현 방법을 분리하여, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 합니다. |
| 팩토리 메서드 (Factory Method) | 객체 생성 인터페이스를 정의하되, 실제 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하도록 미룹니다. |
| 원형 (Prototype) | 생성할 객체의 종류를 기존 인스턴스를 복사(Clone)하여 지정하고, 새 객체를 생성하는 비용을 줄입니다. |
| 싱글톤 (Singleton) | 애플리케이션 전체에서 클래스의 인스턴스가 오직 하나만 생성되도록 보장하고, 이에 대한 전역적인 접근점을 제공합니다. |
2. 구조 패턴 (Structural Patterns)
클래스나 객체들을 조합하여 더 큰 구조를 만드는 방법에 대한 패턴입니다. 서로 독립적으로 작동하던 객체들이 함께 일할 수 있는 형태로 조직화합니다.
| 패턴명 (영문) | 핵심 요약 및 목적 |
|---|---|
| 어댑터 (Adapter) | 호환되지 않는 인터페이스를 가진 클래스들이 함께 작동할 수 있도록 중간에서 변환해 주는 중개자 역할을 합니다. |
| 브리지 (Bridge) | 구현부에서 추상층을 분리하여, 각자 독립적으로 변형하고 확장할 수 있도록 계층을 연결합니다. |
| 컴포지트 (Composite) | 객체들을 트리 구조로 구성하여 부분-전체 계층을 표현하며, 개별 객체와 복합 객체를 동일하게 다룰 수 있게 합니다. |
| 데코레이터 (Decorator) | 객체에 동적으로 새로운 책임(기능)을 추가할 수 있게 하며, 서브클래스를 만드는 것보다 유연한 확장 방법을 제공합니다. |
| 퍼사드 (Facade) | 복잡한 서브시스템 구조의 앞단에 단순화된 하나의 통합 인터페이스를 제공하여 시스템을 사용하기 쉽게 만듭니다. |
| 플라이웨이트 (Flyweight) | 대량의 작은 객체들을 공유하여 메모리 사용량을 최적화하고 성능을 향상시킵니다. |
| 프록시 (Proxy) | 다른 객체에 대한 접근을 제어하거나 대리인 역할을 수행하여, 실제 객체가 필요할 때만 로드하거나 권한을 제어합니다. |
3. 행위 패턴 (Behavioral Patterns)
객체나 클래스 사이의 알고리즘, 책임 분배, 상호작용(통신) 방법을 정의하는 패턴입니다. 결합도를 낮추면서 유연하게 소통하는 것에 집중합니다.
| 패턴명 (영문) | 핵심 요약 및 목적 |
|---|---|
| 책임 연쇄 (Chain of Responsibility) | 요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여하여, 요청을 보내는 쪽과 받는 쪽의 결합을 피하고 사슬을 따라 요청을 전달합니다. |
| 커맨드 (Command) | 요청(명령)을 객체의 형태로 캡슐화하여, 서로 다른 요청을 매개변수화하거나 요청을 큐에 저장, 로그 남기기, 취소(Undo) 작업을 지원합니다. |
| 인터프리터 (Interpreter) | 특정 언어의 문법에 대한 표현식을 정의하고, 이를 해석하는 해석기(평가기)를 구축할 때 사용합니다. |
| 반복자 (Iterator) | 내부 표현 방식을 노출하지 않고, 집합 객체(컬렉션)에 포함된 모든 원소에 순차적으로 접근할 수 있는 방법을 제공합니다. |
| 중재자 (Mediator) | 객체들 간의 복잡한 상호작용을 설계를 단순화하기 위해, 모든 통신을 통제하는 중재자 객체를 두어 객체 간의 직접적인 참조를 줄입니다. |
| 메멘토 (Memento) | 캡슐화를 위배하지 않으면서 객체의 내부 상태를 저장해 두었다가, 필요할 때 원래 상태로 복구(Rollback)할 수 있게 합니다. |
| 옵저버 (Observer) | 한 객체의 상태 변화가 발생하면, 이 객체에 의존하는 다른 객체들에게 통지가 가고 자동으로 상태가 갱신되는 일대다(1:N) 관계를 정의합니다. |
| 상태 (State) | 객체의 내부 상태가 바뀜에 따라 객체의 행위(메서드 동작)를 변경할 수 있게 하며, 마치 객체의 클래스가 바뀌는 것처럼 보이게 합니다. |
| 전략 (Strategy) | 동일 계열의 알고리즘군을 정의하고 각각을 캡슐화하여, 런타임에 상호 교환이 가능하도록 만듭니다. |
| 템플릿 메서드 (Template Method) | 작업의 알고리즘 뼈대(구조)를 메서드에 정의하고, 일부 구체적인 단계는 서브클래스에서 오버라이딩하여 구현하도록 합니다. |
| 방문자 (Visitor) | 데이터 구조(클래스 구조)와 처리를 분리하여, 구조를 변경하지 않고도 새로운 연산(기능)을 동적으로 추가할 수 있게 합니다. |
This post is licensed under CC BY 4.0 by the author.