GoF(Gang of Four)는 소프트웨어 디자인 패턴에 대한 가장 잘 알려진 참고 자료 중 하나인
Design Patterns: Elements of Reusable Object-Oriented Software 책의 저자들을 지칭하는 말이다.
이 책은 디자인 패턴을 고안하고 문서화하여 소프트웨어 개발 커뮤니티에 널리 알려진 기반을 제공했다.
GoF는 Erich Gamma, Richard Helm, Ralph Johnson, John Vissides 네 명의 소프트웨어 엔지니어를 말한다.
GoF가 제안한 Design Patterns: Elements of Reusable Object-Oriented Software 책은 1994년 처음 출판되었으며, 객체 지향 소프트웨어 개발에서 디자인 패턴의 중요성을 강조하고 이를 23가지 주요 디자인 패턴으로 문서화했다.
일반적으로 디자인 패턴은 크게 3가지 범주로 나눌 수 있다.
1. 생성 패턴 - 5
- 생성 패턴은 객체의 생성과 초기화에 관련된 패턴이다. 이러한 패턴은 객체를 어떻게 생성하고 구성할지에 대한 문제를 해결한다.
- 객체 생성에 대한 패턴/ 캡슐화와 유연성
추상 팩토리 (Abstract Factory) | 상위 클래스의 객체 생성코드를 하위클래스가 상속받는다(상위변경=하위자동변경) |
빌더 (Builder) | 분리된 인스턴스를 조합하여 객체 생성. 같은 객체를 생성해도 다른 결과를도출할 수 있음 |
팩토리 메소드 (Factory Method) | 객체 생성 코드를 하위클래스에서 구체화. 상위 클래스는 인터페이스만 제공(각각 다른작업수행) |
프로토타입(Prototype) | 원본을 복제하는 형태로 객체 생성, 비용 저렴 |
싱글턴(Singleton) | 클래스 내 생성되는 인스턴스가 하나만 필요할 때 사용(동시참조X) |
2. 구조패턴 - 7
- 구조 패턴은 클래스 및 객체의 구조화와 조합에 관련된 패턴이다. 이러한 패턴은 객체 간의 관계를 조직화하고 확장성을 향상시키는데 사용된다.
- 구조가 복잡한 시스템 개발에 도움을 줄 수 있는 패턴
어댑터(Adapter) | 일치하지 않는 인터페이스 변환 (전류 어댑터와 같은 역할) |
브릿지(Bridge) | 추상층(기능)과 구현층(구체화)을 분리하여 서로 독립적 확장 가능 |
합성(Composite) | 트리구조로 구성 |
데코레이터(Decorator) | 클래스에 기능을 추가하기 위해 다른 객체를 덧붙이는 형태 |
파사드(Facade) | 다수의 서브클래스들의 통합 인터페이스를 제공할 수 있는 Wrapper 객체 구성 |
플라이웨이트(Flyweight) | 다수의 유사 객체 생성이 필요할 때 메모리 절약을 위해 최대한 공유해서 사용하는 형태 |
프록시(Proxy) | 접근이 어려운 객체에 접근할 수 있도록 인터페이스 역할 수행 |
3. 행위패턴 - 11
- 행위 패턴은 객체 간의 상호 작용 및 역할 분배에 관련된 패턴이다. 이러한 패턴은 객체 간의 협력과 상호작용을 개선하고 중복 코드를 줄이는 데 사용된다.
- 상호작용이나 책임 분배에 대한 부분을 정의하고 결합도는 최소화 하는 것이 목표인 패턴
책임 연쇄(Chain of Responsibility) | 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴. 각 객체들이 고리(Chain)으로 묶여있어 요청이 해결될 때까지 고리를 따라 책임이 넘어간다. |
커맨드(Command) | 명령어를 캡슐화하여 재사용하거나 취소할 수 있도록 필요한 정보를 로그에 남기는 형태 |
인터프리터(Interpreter) | 언어에 문법 표현을 정의하는 패턴 |
반복자(Iterator) | 접근이 잦은 객체는 동일한 인터페이스를 사용하도록 하는 패턴 |
중재자(Mediator) | 상호작용을 캡슐화하여 결합도를 낮추기위해 사용 |
메멘토(Memento) | 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴이다. Ctrl+Z 기능이 이 패턴의 대표적 기능 |
옵저버(Observer) | 이벤트 발행과 구독, 상태 변화 전달. 한 객체의 상태가 변화하면 객체에 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴. 카톡의 읽음표시 같은 느낌 |
상태(State) | 이벤트를 객체 상태에 따라 다르게 처리해야할 때 사용. 카톡 알림설정 같은 느낌 |
전략(Strategy) | 동일 계열 알고리즘 상호 교환, 독립적 사용 |
템플릿 메소드(Template Method) | 상위에서 인터페이스를 정의하고 하위에서 구체화시킴 (유지보수 쉬워짐 |
방문자(Visitor) | 처리 기능을 별도의 클래스로 구성. 분리된 처리 기능은 각 클래스를 방문(Visit)하여 수행한다. |
아직 몇개의 패턴들만 프로젝트를 하면서 이해했고 대부분의 패턴들은 모르고 사용했었는데 디자인 패턴은 매우 중요하기 때문에 필수로 알아야 하는 개념이라고 한다..
책을 읽으면서 패턴들을 하나씩 정리하면서 블로그에 작성해 채워나가야겠다.
출처:
'CS' 카테고리의 다른 글
디자인패턴 - 프로토타입 패턴(Prototype) (0) | 2023.11.19 |
---|---|
디자인 패턴 - 전략 패턴(Strategy) (0) | 2023.11.12 |
CSR 과 SSR 그리고 SPA (1) | 2023.10.28 |
jOOQ 란 (0) | 2023.04.28 |
DSL 이란 (0) | 2023.04.28 |