[Design Pattern] 디자인 패턴 개요

DEINGVELOP·2023년 3월 16일
0

Design Pattern

:모듈화된 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할 때, 참조할 수 있는 전형적인 해결 방식

  • 즉, 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해법과 작명법을 제안한 것이다.

잠깐!
디자인 패턴은 한 패턴에 변형을 가하거나, 어떠한 요구사항을 반영하면 다른 패턴으로 변형되는 특징이 있다.


Design Pattern vs Architecture Pattern

  • 아키텍쳐 패턴은 디자인 패턴보다 상위 수준의 설계에 사용된다.
  • 아키텍쳐 패턴이 전체 시스템의 구조를 설계하기 위한 참조 모델이라면, 디자인 패턴은 서브시스템에 속하는 컴포넌트들끼리의 관계를 설계하기 위한 참조 모델이다.

📌 디자인 패턴의 기본 원칙

  • 가변적인 부분과, 변화하지 않는 부분을 분리해내고, 가변적인 부분들을 캡슐화한다.

  • 구현이 아닌, 인터페이스를 프로그래밍하라. 즉, supertype(상위 형식)에 맞춰서 프로그래밍하라.


패턴으로 소통하면 무엇이 좋은가?

  • 간단한 단어로 많은 이야기를 할 수 있다.

  • 패턴 수준에서 이야기하면 디자인에 더 오랫동안 집중할 수 있다.

  • 전문 용어를 사용하면 개발팀의 능력을 극대화할 수 있다. (작업 빠르게 진행 가능)


GoF Design Pattern (Gang of Four)

: 이 분야의 4인방(Gang of Four, 줄여 GoF)으로 불리는 에리히 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시데스(John Vlissides)가 같이 제안한 23개의 패턴이다.

  • 목적에 따라 분류하면 생성, 구조, 행동 3가지로 나뉜다.

Creational Patterns (생성 패턴)

  • 추상 팩토리 패턴: 동일한 주제의 다른 팩토리를 묶어 준다.
  • 빌더 패턴: 생성(construction)과 표기(representation)를 분리해 복잡한 객체를 생성한다.
  • 팩토리 메서드 패턴: 생성할 객체의 클래스를 국한하지 않고 객체를 생성한다.
  • 프로토타입 패턴: 기존 객체를 복제함으로써 객체를 생성한다.
  • 싱글턴 패턴: 한 클래스에 한 객체만 존재하도록 제한한다.

Structural Patterns (구조 패턴)

  • 어댑터 패턴: 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧씌운다.
  • 브리지 패턴: 추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있다.
  • 합성 패턴: 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있다.
  • 데코레이터 패턴: 기존 객체의 매서드에 새로운 행동을 추가하거나 오버라이드 할 수 있다.
  • 파사드 패턴: 많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공한다.
  • 플라이웨이트 패턴: 다수의 유사한 객체를 생성·조작하는 비용을 절감할 수 있다.
  • 프록시 패턴: 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공한다.

Behavioral Patterns (행동 패턴)

  • 책임연쇄 패턴(Chain of responsibility): 책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조
  • 커맨드 패턴(Command Pattern: 위의 명령어를 각각 구현하는 것보다는 위 그림처럼 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행하는 것
  • 해석자 패턴 (Interpreter Pattern): 문법 규칙을 클래스화한 구조를 갖는SQL 언어나 통신 프로토콜 같은 것을 개발할 때 사용
  • 반복자 패턴 (Iterator Pattern): 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 메서드를 이용해 자료구조를 활용할 수 있도록 해준다.
  • 옵저버 패턴: 어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해주는 것
    전략 패턴 (Strategy Pattern): 알고리즘 군을 정의하고 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 해준다.
  • 템플릿 메서드 패턴 (Template method pattern): §상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정되는 디자인 패턴
  • 방문자 패턴 (visitor Pattern): 각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 visitor 클래스로 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 하는 것
  • 중재자 패턴 (Mediator Pattern): 클래스간의 복잡한 상호작용을 캡슐화하여 한 클래스에 위임해서 처리 하는 디자인 패턴
  • 상태 패턴 (State Pattern): 동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용하는 디자인 패턴
  • 기념품 패턴 (Memento Pattern): Ctrl + z 와 같은 undo 기능 개발할 때 유용한 디자인패턴. 클래스 설계 관점에서 객체의 정보를 저장

0개의 댓글