소프트웨어공학-설계 패턴

Yeons·2022년 12월 10일

스터디

목록 보기
7/8

패턴

실설계에 존재하는 사물이나 개념에서 반복적으로 발생하는 형상을 추상화하여 정의한 것을 의미한다.

실제 패턴

우리 환경에서 반복적으로 발생하는 문제들에 대하여 적합한 디자이니 솔루션을 정의한 것이라 할 수 있다.

  1. 패턴 이름과 분류 : 패턴이 정의하는 특성과 본질이 정확히 표현되도록 간결한 이름을 쓴다.
  2. 패턴의 의도 : 패턴이 하는 일, 해결하려는 문제를 기술한다.
  3. 별칭 : 또 다른 이름이 있다면 이를 기술한다.
  4. 동기 : 문제 해결 방법을 보여주는 시나리오의 일종으로 표현된다. 즉, 패턴에 포함되는 클래스가 어떻게 문제를 해결하는가를 기술한다.
  5. 적용 대상 : 패턴이 적용될 수 있는 상황을 의미한다. 필요시 패턴 사용으로 좋지 않은 설계 결과를 얻는 예를 포함할 수 있다.
  6. 구조 : UML의 클래스들과 이들 간의 관계로 나타나는 패턴의 그래픽 다이어그램이다.
  7. 참여 클래스 : 패턴에 참여하는 클래스 혹은 오브젝트들의 목록이다.
  8. 협업 관계 : 클래스의 역할을 수행하기 위해 다른 클래스와의 협업 관계를 기술한다.
  9. 결과 : 패턴이 문제를 어떻게 해결하는지, 패턴 적용의 장점과 단점은 무엇인지 설명한다.
  10. 구현 고려사항 : 패턴을 구현할 때 알아야 할 함정, 힌트, 관련 기술이 무엇인지, 언어에 대한 문제는 없는지 등을 기술한다.
  11. 샘플 코드 : 코드 조직
  12. 용도 : 시스템에서 패턴이 적용된 예제를 보여준다.
  13. 관련 패턴 : 밀접하게 관련된 다른 패턴이 존재하는지, 함께 적용해야 할 다른 패턴이 있는지를 기술한다.

GoF 디자인 패턴 분류

사용 목적에 따라 분류

1. 생성 패턴

객체의 생성 과정이나 초기화에 관여하는 패턴들

2. 구조 패턴

클래스나 객체의 합성에 관한 패턴들

3. 행위 패턴

클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법에 대해 정의한 패턴들

패턴 관의 관계

1. 생성 패턴 : 객체의 생성 과정이나 초기화에 관여하는 패턴들

추상 팩토리 패턴(Abstract Factory Pattern)
: 동일한 주제의 다른 팩토리를 묶어 준다.

빌더 패턴(Builder Pattern)
: 생성(construction)과 표기(representation)를 분리해 복잡한 객체를 생성한다.

팩토리 메서드 패턴(Factory Method Pattern)
: 생성할 객체의 클래스를 국한하지 않고 객체를 생성한다.

프로토타입 패턴(Prototype Pattern)
: 기존 객체를 복제함으로써 객체를 생성한다.

싱글턴 패턴(Singleton pattern)
: 한 클래스에 한 객체만 존재하도록 제한한다.

2. 구조 패턴 : 클래스나 객체의 합성에 관한 패턴들

어댑터 패턴(Adapter Pattern)
: 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧씌운다.

브리지 패턴(Bridge Pattern)
: 추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있다.

합성 패턴(Composite pattern)
: 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있다.

데코레이터 패턴(Decorator Pattern)
: 기존 객체의 매서드에 새로운 행동을 추가하거나 오버라이드 할 수 있다.

퍼사드 패턴(Facade Pattern)
: 많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공한다.

플라이웨이트 패턴(Flyweight Pattern)
: 다수의 유사한 객체를 생성·조작하는 비용을 절감할 수 있다.

프록시 패턴(Proxy Pattern)
: 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공한다.

3. 행위 패턴 : 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법에 대해 정의한 패턴들

책임연쇄 패턴(Chain of responsibility)
: 책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조이다.

커맨드 패턴(Command Pattern)
: 명령어를 각각 구현하는 것보다는 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행한다.

인터프리터 패턴(Interpreter Pattern)
: 문법 규칙을 클래스화한 구조를 갖는 SQL 언어나 통신 프로토콜 같은 것을 개발할 때 사용한다.

이터레이터 패턴 (Iterator Pattern)
: 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 메서드를 이용해 자료구조를 활용할 수 있도록 해준다.

옵저버 패턴(Observer Pattern)
: 어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해준다.

전략 패턴 (Strategy Pattern)
: 알고리즘 군을 정의하고 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 해준다.

템플릿 메서드 패턴 (Template method pattern)
: 상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정된다.

방문자 패턴 (visitor Pattern)
: 각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 visitor 클래스로 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행한다.

중재자 패턴 (Mediator Pattern)
: 클래스간의 복잡한 상호작용을 캡슐화하여 한 클래스에 위임해서 처리한다.

상태 패턴 (State Pattern)
: 동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용한다.

기념품 패턴 (Memento Pattern)
: Ctrl + z 와 같은 undo 기능 개발할 때 유용한 디자인패턴. 클래스 설계 관점에서 객체의 정보를 저장한다.

다음은 설계 원리로 찾아뵙겠습니다.

profile
공부중

0개의 댓글