Gof 디자인 패턴

waonderboy·2022년 3월 2일
1

디자인 패턴

목록 보기
1/3
post-thumbnail

Gof 디자인 패턴

디자인 패턴

💡디자인 패턴이란 용어의 유래
디자인 패턴이라는 말은 1987년도에 발표된 "Using Pattern Languages for Object-Oriented Programs"라는 논문을 통해 처음으로 제안되었으며 이후 4명의 저자(Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides)에 의해 발표된 “Design Patterns: Elements of Reusable Object-Oriented Software"라는 책을 통해 많은 사람들에게 알려지게 되었다. 이후에 4명의 저자는(GoF, Gang of Four)라고 불려지게 되었고, 이 때문에 소프트웨어에서 흔히 말하는 디자인 패턴은 'Gof 디자인 패턴'을 의미하게 되었다.

Gof(Gang of Four) 디자인 패턴은 4명의 저자가 C++를 사용하여 대규모 엔터프라이즈 시스템을 프로그래밍 한 경험을 통해 일반적인 패턴이 나타나는 것을 발견했고 그 중 대표적인 23개의 패턴을 정리해 책을 쓰면서 사람들에게 알려지게 되었다.

디자인 패턴은 객체지향 프로그래밍에서 발견되는 이슈(주로 객체의 의존성이나 독립성에 관련된 문제)들의 해결방법에 대해 서술하였으며 일반적으로 전체 소프트웨어 아키텍처의 큰 규모의 문제보다는 객체 생성 및 상호 작용의 문제를 해결하는 데 목표를 두고 있다. 디자인 패턴은 특정한 코드나 규약을 의미하는것이 아닌 템플릿 형태로 일반화된 솔루션을 말한다.

때문에 디자인 패턴의 개념을 정확히 이해하고 적절하게 적용하는 것이 중요하다. 만약 상황에 대해 잘못된 패턴을 사용하거나 사소한 문제에 디자인 패턴을 적용하면 코드가 지나치게 복잡해지고 유지 관리 문제가 발생할 수 있다.

정리하자면 디자인 패턴은 객체지향 프로그래밍에서 객체 생성 및 상호 작용시 발생하는 문제에 대한 일반적이고 재사용 가능한 솔루션이자 템플릿이다.


디자인 패턴의 분류

💡디자인 패턴의 장점
디자인 패턴은 의사소통시 경제적인 장점이 있다. 예를 들어 문제 해결 제안에 있어서 “기능마다 별도의 클래스를 만들고, 그 기능들로 해야할 일을 한번에 처리해주는 클래스를 만들자.”라고 복잡하게 설명하는 것 보다 "Strategy Pattern을 써보자."라고 제안하면 서로 이해하기 쉬울 것이다.

디자인 패턴은 세 가지 유형으로 나뉜다.


  • Creational : 객체 생성을 다루는 디자인 패턴.
  • Structural : 상속, 합성과 같은 클래스 구조를 다룬 디자인 패턴.
  • Behavioral : 객체 간의 더 나은 상호 작용, 손실 결합을 제공하는 방법 및 향후 쉽게 확장할 수 있는 유연성에 대한 솔루션을 제공.


생성패턴 (Creational)

GoF 디자인 패턴에는 5개의 생성 패턴이 있다.

Pattern NameDescription
Singleton싱글톤 패턴은 클래스의 인스턴스를 하나만 만들 수 있도록 클래스 초기화를 제한
Factory팩토리 패턴은 클래스에서 팩토리 클래스로 객체를 인스턴스화하는 책임을 짐
Abstract Factory팩토리 클래스용 팩토리를 생성
Builder단계별로 개체를 만들고 마지막으로 개체 인스턴스를 가져오는 방법
Prototype다른 유사한 인스턴스에서 새 개체 인스턴스를 만든 다음 요구 사항에 따라 수정

구조패턴 (Structural)

GoF 디자인 패턴에는 7개의 생성 패턴이 있다.

Pattern NameDescription
Adapter서로 관련이 없는 두 엔터티 간의 인터페이스를 제공하여 함께 작동할 수 있도록 함
Composite부분-전체 계층 구조를 구현해야 할 때 사용
Proxy다른 개체에 대한 액세스를 제어하기 위해 중개자 제공
Flyweight변경할 수 없는 개체와 함께 사용되는 개체 인스턴스를 캐싱하고 재사용
Facade클라이언트 응용 프로그램을 돕기 위해 기존 인터페이스 위에 wrapper 인터페이스를 만듬
Bridge인터페이스를 구현에서 분리하고 클라이언트 프로그램에서 구현 세부 정보를 숨기는 데 사용
Decorater런타임에 개체의 기능을 수정하는 데 사용

행위패턴 (Behavioral)

GoF 디자인 패턴에는 11개의 생성 패턴이 있다.

Pattern NameDescription
Template Method일부 구현 단계를 하위 클래스로 연기하는 데 사용
Mediator시스템의 서로 다른 개체 간에 중앙 집중식 통신 매체를 제공하는 데 사용
Chain of Responsibility클라이언트의 요청이 객체 체인으로 전달되어 처리되는 소프트웨어 설계에서 느슨한 결합을 달성하는 데 사용
Observer객체의 상태에 관심이 있고 변경 사항이 있을 때마다 알림을 받고 싶을 때 사용
Strategy전략 패턴은 특정 작업에 대해 여러 알고리즘이 있고 클라이언트가 런타임에 사용할 실제 구현을 결정
Command명령 패턴은 요청-응답 모델에서 결합 손실을 구현하는 데 사용
State상태 디자인 패턴은 객체가 내부 상태에 따라 동작을 변경할 때 사용
Visitor방문자 패턴은 유사한 종류의 개체 그룹에 대해 작업을 수행해야 할 때 사용
Interpreter언어에 대한 문법적 표현을 정의하고 이 문법을 처리하는 인터프리터를 제공
Iterator개체 그룹을 통과하는 표준 방법을 제공하는 데 사용
Memento메멘토 디자인 패턴은 나중에 복원할 수 있도록 객체의 상태를 저장하고 싶을 때 사용



디자인 패턴별 클래스 다이어그램

디자인패턴 이미지1 (출처: mcdonaldland 블로그) 디자인패턴 이미지2 (출처: mcdonaldland 블로그)




Reference

http://www.blackwasp.co.uk/gofpatterns.aspx
https://ko.wikipedia.org/wiki/%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4
https://www.journaldev.com/31902/gangs-of-four-gof-design-patterns
http://www.mcdonaldland.info/

profile
wander to wonder 2021.7 ~

0개의 댓글