본문 바로가기
Design Pattern

디자인 패턴 (Design patterns)

by codeyaki 2023. 2. 3.
반응형
 
GoF의 디자인 패턴(개정판)
객체지향 소프트웨어를 설계할 때 겪는 문제들에 대한 해결책을 집대성하여 제시하는 『GoF의 디자인 패턴』. 이 책은 디자인 패턴이 무엇인지, 패턴이 어떻게 객체지향 프트웨어 설계에 어떻게 도움을 주는지, 실제 디자인 패턴은 어떻게 되는가 등에 관하여 정리한 내용들을 수록하고 있다.
저자
에릭 감마, 리처드 헬름, 랄프 존슨, 존 블리시디스
출판
Pearson
출판일
2011.11.01

디자인 패턴은 GoF(4인의 갱)으로도 알려진 Erich Gamma(에리히 감마), Richard Helm(리처드 헬름), Ralph Johnson(랄프 존슨), John Vlissides(존 블리시데스)이 1994년 출판한 "Design Patterns: Elements of Reusable Object-Oriented Software" 책을 통해 제시된 개념이다. 이후로 가장 영향력 있는 책 중 한 개로 인정받고 있다.

책의 저자들은 소프트웨어 시스템을 개발한 경험을 바탕으로 23개의 디자인 패턴을 수집하고 문서화했는데 이를 통해 소프트웨어 설계를 위한 공통 어휘와 모범 사례를 제공하여 개발자들이 소프트웨어 프로젝트에 대해 더 쉽게 소통하고 협업할 수 있도록 하는 것이 목표였다. 또한 일반적인 설계 문제에 대한 검증된 솔루션을 제공함으로써 개발자들이 코드의 품질과 유지보수성을 향상하는 것을 목표로 하였다.

 

 

 

요약
- 디자인 패턴은 GOF가 출판한 Design Patterns: Elements of Reusable Object-Oriented Software책에 제시된 개념
- 23개의 디자인 패턴을 분석 및 분류 (생성 5개, 구조 7개, 행동 11개)
- 디자인 패턴을 통해 코드 품질, 유지보수성을 향상하고 다른 개발자들과 쉽게 소통이 가능하도록 만드는 것이 목표

디자인 패턴 분류

  1. 생성 패턴(Creational patterns)
    • 상황에 적합한 방식으로 객체를 생성하려고 하는 객체 생성 메커니즘과 관련이 있다.
    • 5개의 패턴이 속해있다.
    • 싱글톤(Singleton), 팩토리 메소드(Factory Method), 추상 팩토리(Abstract Factory), 빌더(Builder), 프로토타입(Prototype)이 있다.
  2. 구조 패턴(Structural patterns)
    • 객체 구성, 더 큰 구조를 형성하기 위한 물체의 배열과 관련이 있다.
    • 7개의 패턴이 속해있다.
    • 어댑터(Adapter), 브리지(Bridge), 컴포지트(Composite), 데코레이터(Decorator), 파사드(Facade), 플라이웨이트(Flyweight), 프록시(Proxy)가 있다.
  3. 행동 패턴(Behavioral patterns)
    • 객체(혹은 클래스) 간의 통신, 객체(혹은 클래스) 간에 무슨 일이 일어나고 그것들이 함께 작동하는 방식과 관련이 있다.
    • 11개의 패턴이 속해있다.
    • 책임 체인(Chain of Responsibility), 명령어(Command), 인터프리터(Interpreter), 반복자(Iterator), 중재자(Mediator), 기념품(Memento), 관찰자(Observer), 상태(State), 전략(Strategy), 템플릿 방법(Template Method), 방문자(Visitor)가 포함된다.

보다 복잡한 문제를 해결하기 위해 디자인 패턴을 결합할 수 있고, 소프트웨어 개발 분야가 발전함에 따라 새로운 패턴도 생성될 수 있다는 것을 주의해야 한다. 가장 중요한 것은 각 패턴의 기본 원리와 이를 소프트웨어 시스템 개발에 적용할 시기와 방법을 이해하는 것이다.

 

생성 패턴 구조 패턴 행동 패턴
싱글톤(Singleton) 어댑터(Adapter) 책임 체인(Chain of Responsibility)
팩토리 메소드(Factory Method) 브리지(Bridge) 명령어(Command)
추상 팩토리(Abstract Factory) 컴포지트(Composite) 인터프리터(Interpreter)
빌더(Builder) 데코레이터(Decorator)  반복자(Iterator)
프로토타입(Prototype) 파사드(Facade) 중재자(Mediator)
  플라이웨이트(Flyweight) 기념품(Memento)
  프록시(Proxy) 관찰자(Observer)
    상태(State)
    전략(Strategy)
    템플릿 방법(Template Method)
    방문자(Visitor)

 


디자인패턴의 구조

  • 패턴 이름(Pattern name): 패턴을 식별하는 고유한 이름
  • 의도(Intent): 패턴이 해결하는 문제와 패턴이 달성하고자 하는 목표에 대한 설명, 패턴을 참조할 수 있는 다른 이름
  • 동기(Motivation): 패턴이 사용되는 상황과 문제 해결에 필요한 어려움에 대한 설명
  • 적용 가능성(Applicability): 패턴을 적용할 수 있는 조건에 대한 설명
  • 구조(Structure): 솔루션과 관련된 여러 개체와 클래스 간의 관계를 보여주는 클래스 다이어그램
  • 참가자(Participants): 책임 및 협업을 포함하여 솔루션과 관련된 클래스 및 개체의 목록
  • 상호협력(Collaborations): 개체와 클래스가 함께 작동하여 문제를 해결하는 방법에 대한 설명
  • 결과(Consequences) 설계 패턴을 사용할 경우의 절충점과 이점, 제한 또는 단점에 대해 설명
  • 구현(Implementation): 코드 조각 또는 샘플을 포함하여 코드에서 설계 패턴을 구현하는 방법에 대한 설명
  • 샘플 코드(Sample code): 패턴을 구현하는 방법을 보여주는 예제 코드
  • 알려진 용도(Known uses): 사용 중인 패턴의 실제 예제 목록

이 구조는 일반적인 설계 문제에 대한 솔루션을 명확하고 간결하게 이해할 수 있는 방법을 제공하며, 패턴의 다양한 요소를 통해 솔루션이 잘 문서화되고 유지보수 가능하며 재사용 가능하도록 보장한다. 책의 디자인 패턴은 유사한 디자인 문제를 해결하는 출발점으로 사용될 수 있으며 프로젝트의 특정 요구에 맞게 조정되어 사용될 수 있다.

반응형

'Design Pattern' 카테고리의 다른 글

Strategy Pattern, 전략 패턴  (1) 2024.10.17