디자인 패턴은 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개)
- 디자인 패턴을 통해 코드 품질, 유지보수성을 향상하고 다른 개발자들과 쉽게 소통이 가능하도록 만드는 것이 목표
디자인 패턴 분류
- 생성 패턴(Creational patterns)
- 상황에 적합한 방식으로 객체를 생성하려고 하는 객체 생성 메커니즘과 관련이 있다.
- 5개의 패턴이 속해있다.
- 싱글톤(Singleton), 팩토리 메소드(Factory Method), 추상 팩토리(Abstract Factory), 빌더(Builder), 프로토타입(Prototype)이 있다.
- 구조 패턴(Structural patterns)
- 객체 구성, 더 큰 구조를 형성하기 위한 물체의 배열과 관련이 있다.
- 7개의 패턴이 속해있다.
- 어댑터(Adapter), 브리지(Bridge), 컴포지트(Composite), 데코레이터(Decorator), 파사드(Facade), 플라이웨이트(Flyweight), 프록시(Proxy)가 있다.
- 행동 패턴(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 |
---|