본문 바로가기
디자인 패턴(Design Pattern)

GoF 23 디자인 패턴

by Volka 2024. 2. 25.

구조 패턴 (Structural Patterns)

💡 구조 패턴은 구조를 유연하고 효율적으로 유지하면서 객체들과 클래스들을 더 큰 구조로 조립하는 방법

  • 어댑터 패턴(Adapter)
    • 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 한다.
    • 또는 Wrapper로도 불린다.
    • 어댑터 패턴(Adapter)
  • 브릿지 패턴(Bridge)
    • 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조(추상화 및 구현)로 나눈 후 각각 독립적으로 개발할 수 있도록 한다.
    • 브릿지 패턴 (Bridge)
  • 복합체 패턴(Composite)
    • 객체들을 트리 구조들로 구성한 후, 이러한 트리 구조들이 개별 객체들인 것처럼 작업할 수 있도록 하는 디자인 패턴이다.
    • 복합체 패턴 (Composite)
  • 데코레이터 패턴(Decorator)
    • 객체들을 새로운 행동들을 포함한 특수 래퍼 객체들 내에 넣어서 위 행동들을 해당 객체들에 연결시킨다.
    • 래퍼(wrapper)라고도 불린다.
    • 데코레이터 패턴(Decorator)
  • 퍼사드 패턴(Facade)
    • 라이브러리, 프레임워크 또는 다른 클래스들의 복잡한 집합에 대한 단순화된 인터페이스를 제공한다.
    • 퍼사드 패턴(Facade)
  • 플라이웨이트 패턴(Flyweight)
    • 각 객체에 모든 데이터를 유지하는 대신 여러 객체 간에 상태의 공통 부분들을 공유하여 사용할 수 있는 메모리에 더 많은 객체를 포함할 수 있도록 한다.
    • 캐시라고도 불린다.
    • 플라이웨이트 패턴(Flyweight)
  • 프록시 패턴(Proxy)
    • 다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있다.
    • 프록시는 해당 객체에 대한 접근을 제어하므로, 요청이 해당 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 한다.
    • 프록시 패턴(Proxy)

생성 패턴 (Creational Patterns)

💡 생성 디자인 패턴은 기존 코드의 유연성과 재사용을 증가시키는 객체를 생성하는 다양한 방법을 제공한다.

  • 팩토리 메서드 (Factory Method)
    • 부모 클래스에서 객체를 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체의 유형을 변경할 수 있도록 한다.
    • 팩토리 메서드 (Factory Method)
  • 추상 팩토리 (Abstract Factory)
  • 빌더 패턴(Builder)
    • 복잡한 객체들을 단계별로 생성할 수 있도록 한다. 이 패턴은 같은 생성코드를 사용하여 객체의 다양한 유형들과 표현을 생성할 수 있다.
    • 빌더 패턴(Builder)
  • 프로토타입 패턴(Prototype)
    • 코드를 그들의 클래스들에 의존시키지 않고 기존 객체들을 복사할 수 있도록 한다.
    • 클론으로도 불린다.
    • 프로토타입 패턴
  • 싱글턴 패턴(Singleton)
    • 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공한다.
    • 싱글턴 패턴(Singleton)

행동 패턴(Behavioral Patterns)

  • 책임 연쇄 패턴(CoR : Chain of Responsibility)
    • 일련의 핸들러들의 사슬을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴
    • 각 핸들러는 요청을 받으면 요청을 처리할지 아니면 체인의 다음 핸들러로 전달할지 결정한다.
    • 커맨드 사슬 이라고도 불린다.
    • 책임 연쇄 패턴(CoR : Chain of Responsibility)
  • 커맨드 패턴(Command)
    • 요청을 요청에 대한 모든 정보가 포함된 독립 실행형 객체로 변환.
    • 이 변환은 다양한 요청들이 있는 메서드들을 인수화할 수 있도록 하며, 요청의 실행을 지연 또는 대기열에 넣을 수 있도록 하고, 또 실행 취소할 수 있는 작업을 지원할 수 있도록 한다.
    • 액션, 트랜잭션 이라고도 불린다.
    • 커맨드 패턴(Command)
  • 반복자 패턴(Iterator)
    • 컬렉션의 요소들의 기본 표현(리스트, 스택, 트리 등)을 노출하지 않고 그들을 하나씩 순회할 수 있도록 한다.
    • 반복자 패턴(Iterator)
  • 중재자 패턴(Mediator)
    • 객체 간의 혼란스러운 의존 관계들을 줄일 수 있다.
    • 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 한다.
    • 중개인, 컨트롤러 라고도 불린다.
    • 중재자 패턴(Mediator)
  • 메멘토 패턴(Memento)
    • 객체의 구현 세부 사항을 공개하지 않으면서 해당 객체의 이전 상태를 저장하고 복원할 수 있게 한다.
    • 스냅샷이라고도 불린다.
    • 메멘토 패턴(Memento)
  • 옵저버 패턴(Observer)
    • 여러 객체에 자신이 관찰 중인 객체에 발생하는 모든 이벤트에 대하여 알리는 구독 매커니즘을 정의할 수 있도록 한다.
    • 이벤트 구독자, 경청자 라고도 불린다.
    • 옵저버 패턴(Observer)
  • 상태 패턴(State)
    • 객체의 내부 상태가 변경될 때 해당 객체가 그의 행동을 변경할 수 있도록 한다.
    • 객체가 행동을 변경할 때 객체가 클래스를 변경한 것처럼 보일 수도 있다.
    • 상태 패턴(State)
  • 전략 패턴(Strategy)
    • 알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스들에 넣은 후 그들의 객체들을 상호교환할 수 있도록 한다.
    • 전략 패턴(Strategy)
  • 템플릿 메서드(Template Method)
    • 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드(재정의) 할 수 있도록 한다.
    • 템플릿 메서드(Template Method)
  • 비지터 패턴(Visitor)

'디자인 패턴(Design Pattern)' 카테고리의 다른 글

SOLID 원칙  (0) 2024.02.25
디자인 패턴이란?  (0) 2024.02.25