디자인 패턴(Design Pattern)이란?
- 각 모듈의 세분화된 역할이나 모듈들 간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결 방식
- 자주 사용하는 설계 형태를 정형화하여 유형별로 설계 템플릿을 만들어 두고 소프트웨어 개발 중 나타나는 과제를 해결하기 위한 방법 중 한 가지다.
- 다양한 응용 소프트웨어 시스템들을 개발할 때 서로 간에 공통되는 설계 문제가 존재하는 데, 각 해결책 사이에도 공통점이 있으며 이러한 유사점을 패턴이라 한다.
- 개발자 간 원활한 의사소통, 소프트웨어 구조 파악 용이, 설계 변경에 대한 유연한 대처, 개발의 효율성, 유지보수성, 운용성 등 소프트웨어 품질 향상에 도움을 준다.
- 객체 지향 프로그래밍 설계 시 유사한 상황에서 구조적인 문제를 해결할 수 있도록 방안을 제공한다.
디자인 패턴을 이용한 소프트웨어 재사용의 이점
- 소프트웨어 코드의 품질을 향상시킬 수 있다.
- 개발자들 사이의 의사소통을 원활하게 할 수 있다.
- 소프트웨어의 품질과 생산성을 향상시킬 수 있다.
- 시스템 개발 시 공통 언어 사용 (의사소통 원활)
- 코드의 품질 향상
- 향후 변화에 대한 대비 가능
- 유지보수 용이
GoF(Gang of Four) 디자인 패턴
- GoF(Gang of Four) 패턴: 에리히 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시데스(John Vlissides)가 같이 고안한 디자인 패턴
💡 왜 GoF라고 부르나요?
→ GoF(Gang of Four) 디자인 패턴은 4명의 저자가 C++를 사용하여 대규모 엔터프라이즈 시스템을 프로그래밍 한 경험을 통해 일반적인 패턴이 나타나는 것을 발견했고 그 중 대표적인 23개의 패턴을 정리해 책을 쓰면서 사람들에게 알려지게 됨.
https://velog.io/@waoderboy/Gof-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4
GoF 디자인 패턴의 분류
구분 | 종류 |
생성 패턴 | Abstract Factory, Builder, Factory Method, Prototype, Singleton |
구조 패턴 | Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy |
행위 패턴 | Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategty, Template Method, Visitor |
생성 패턴
- 객체를 생성하는 것과 관련된 패턴이다.
- 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화하도록 만들어주어 유연성을 높일 수 있고 코드를 유지하기가 쉬운 편이다.
- 객체의 생성과 참조 과정을 추상화함으로써 시스템을 개발할 때 부담을 덜어준다.
① 추상 팩토리 패턴(Abstract Factory Pattern) : 동일한 주제의 다른 팩토리를 묶어 준다.
② 빌더 패턴(Builder Pattern) : 생성(construction)과 표기(representation)를 분리해 복잡한 객체를 생성.
③ 팩토리 메서드 패턴 (Factory Method Pattern) : 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성 하도록 하는 방식
④ 프로토타입 패턴 (Prototype Pattern) : 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자신을 복제함.
⑤ 싱글턴 패턴 (Singleton Pattern) : 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴하도록 하는 디자인 유형
구조 패턴
- 클래스나 객체를 조합해 더 큰 구조를 만들어 내는 디자인 패턴
- 복잡한 형태의 구조를 갖는 시스템을 개발하기 쉽게 만들어주는 패턴
- 새로운 기능을 가진 복합 객체를 효과적으로 작성 가능
① 어댑터 패턴(Adapter Pattern) : 래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해줌.
② 브릿지 패턴(Bridge Pattern) : 구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 구성.
③ 컴포지트 패턴 (Composite Pattern) : 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 함.
④ 데코레이터 패턴(Decorator Pattern) : 주어진 상황 및 용도에 따라 어떤 객체에 책임(기능)을 동적으로 추가하는 패턴
⑤ 퍼사드 패턴 (Facade Pattern) : 클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체를 기반으로 디자인을 하는 패턴
⑥ 플라이웨이트 패턴 (Flyweight Pattern) : 동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여 사용하도록 하여 메모리 사용량을 최소화하는 소프트웨어 디자인 패턴
⑦ 프록시 패턴(Proxy Pattern) : 일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다. 프록시는 어떠한 것과도 인터페이스의 역할을 수행할 수 있다. 프록시 패턴의 잘 알려진 예로는 참조 횟수 스마트 포인터 객체이다.
행위 패턴
- 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의
- 메시지 교환과 관련된 것으로, 객체 간의 행위나 알고리즘 등과 관련된 패턴을 말함
① 역할 사슬 패턴 (Chain of Responsibility Pattern) : 여러 개의 객체 중에서 어떤 것이 요구를 처리할 수 있는지를 사전에 알 수 없을 때 사용, 어떤 프로세스가 일어났을때 그 프로세스를 처리할 책임을 적당한 대상한테 넘김.
② 커맨드 패턴 (Command pattern) : 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴
③ 인터프리터 패턴 (Interpreter Pattern) : 문법 규칙을 클래스화 한 구조로, 일련의 규칙으로 정의된 문법적 언어를 해석하는 패턴
④ 반복자 패턴 (Iterator Pattern) : 객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며 컨테이너의 요소들에 접근하는 디자인 패턴
⑤ 중재자 패턴 (Mediator Pattern) : 모든 클래스간의 복잡한 로직(상호작용)을 캡슐화하여 하나의 클래스에 위임하여 처리하는 패턴이다. 즉, M:N의 관계에서 M:1의 관계로 바꾸는 것.
⑥ 메멘토 패턴 (Memento Pattern) : 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 소프트웨어 디자인 패턴
⑦ 옵저버 패턴 (Observer Pattern) : 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴
⑧ 스테이트(상태)패턴 (State Pattern) : 동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용하는 디자인 패턴
⑨ 전략(정책) 패턴 (Strategy Pattern) : 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴
⑩ 템플릿 메소드 패턴 (Template Method Pattern) : 소프트웨어 공학에서 동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴
⑪ 비지터 패턴(Visitor Pattern) : 알고리즘을 객체 구조에서 분리시키는 디자인 패턴이다. 이렇게 분리를 하면 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있게 된다. 개방-폐쇄 원칙을 적용하는 방법의 하나
'CS BASIC > 정보시스템 일반' 카테고리의 다른 글
[CS BASIC] 미들웨어(Middle Ware) 솔루션 (0) | 2023.08.04 |
---|---|
[CS BASIC] 시스템 인터페이스와 인터페이스 대상 식별 (0) | 2023.08.03 |
[CS BASIC] 소프트웨어 아키텍처 디자인 패턴(Software Architecture Design Pattern) (0) | 2023.07.30 |
[CS BASIC] 소프트웨어 아키텍처 (Software Architecture) (0) | 2023.07.16 |
[CS BASIC] 모듈(Module) (0) | 2023.07.15 |