디자인패턴

김병화·2023년 7월 6일
0

GoF(Gang of Four) 디자인 패턴

목적에 따른 분류

  1. 생성 패턴 : 5개
  2. 구조 패턴 : 7개
  3. 행위 패턴 : 11개

1. 생성 패턴

  • 빌더(Builder)
    • 복잡한 인스턴스를 조립
    • 생성과 표기를 분리하여 복잡한 인스턴스 생성
    • 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 생성

  • 팩토리 메소드(Factory Method)
    • 상위 클래스에서 인스턴스 정의, 하위 클래스에서 인스턴스 생성

  • 추상 팩토리(Abstract Factory)
    • 구체적인 클래스에 의존하지 않고, 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스 제공

  • 프로토타입(Prototype)
    • 일반적인 원형을 만들어놓고, 기존 객체를 복제함으로써 객체를 생성

  • 싱글톤(Singleton)
    - 전역 변수를 사용하지 않고 객체를 하나만 생성하여, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴



2. 구조 패턴

  • 브릿지(Bridge)
    • 구현부와 추상 계층을 분리

  • 어댑터(Adapter)
    • 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록(재사용할 수 있도록) 중간에서 맞춰주는 역할

  • 컴포지트(Composite)
    • 단일 객체와 복합 객체를 동일하게 취급

  • 데코레이터(Decorator)
    • 기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴
    • 기존 코드를 변경하지 않으면서 부가적인 기능을 추가할 수 있는 패턴

  • 퍼싸드(Facade)
    • 건물의 외관을 바라본 모습을 뜻한다. 즉, 안쪽에 쓰여진 자세한 것을 알지 못한다.
    • 복잡한 과정을 숨기고 겉만 보여주는 패턴
    • 복잡한 시스템에 대하여 단순한 인터페이스를 제공

  • 플라이웨이트(Flyweight)
    • 가벼운 이란 뜻
    • 객체를 가볍게 만들어 메모리 사용을 줄이는 패턴
    • 여러 개의 가상 인스턴스를 제공하여 메모리 절감

  • 프록시(Proxy)
    - 대리인을 뜻한다.
    - 대리 객체를 거쳐 특정 객체에 대한 접근을 제어하거나 기능을 추가하는 패턴
    - 실체 객체를 드러나지 않게 하여 정보은닉의 역할도 수행한다.



3.행위 패턴

  • 중재자(Mediator)
    • 중재자를 두고 중재자에게 모든 것을 요구하여 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해주는 디자인 패턴
    • 여러 객체들 간의 통신을 추상화시켜 객체들 간의 의존성(결합도)을 낮추는 패턴

  • 반복자(Iterator)
    • 집합 객체의 내부 구조를 노출시키지 않고 순차적으로 접근 가능하게 해주는 패턴

  • 커맨드(Command)
    • 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 특징을 갖는 패턴
    • 요청을 캡슐화하여 호출자와 수신자를 분리하는 패턴

  • 인터프리터(Interpreter)
    • 자주 등장하는 문제를 간단한 언어로 정의하고 재사용하는 패턴
    • 문법 자체를 캡슐화하여 사용

  • 메멘토(Memento)
    • 객체를 이전 상태로 복구시켜야 하는 경우, 작업취소(Undo) 요청 가능
    • 캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 패턴

  • 옵서버(Observer)
    • 한 객체의 생태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 방법

  • 상태(State)
    • 객체의 상태에 따라 행위 내용을 변경
    • 객체 상태를 캡슐화하여 그것을 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록 행위 내용을 변경

  • 전략(Strategy)
    • 여러 알고리즘을 캡슐화하고 상호 교환해서 사용할 수 있게 하는 패턴

  • 템플릿 메소드(Template Method)
    • 상위 클래스(추상 클래스)에서 기능의 골격을 제공하고 하위 클래스(구체 클래스)에서 세부 처리를 구체화한다.

  • 책임 연쇄(Chain of Responsibility)
    • 특정한 책임을 가진 클래스들이 서로 연결되어 있는 구조로 무언가를 처리하는 패턴
    • 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴
    • 한 요청을 2개 이상의 객체에서 처리

  • 방문자(Visitor)
    • 객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용하는 디자인 패턴


* 참고

0개의 댓글