Post

디자인패턴 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.