디자인 패턴

개념

소프트웨어를 개발할 때 공통되는 설계 문제가 존재하며 이를 처리하는 해결책 사이에도 공통점이 있다. 이러한 유사점을 패턴이라고 한다. 디자인 패턴이란 소프트웨어를 설계할 때 특정 상황에서 자주 발생하는 문제들을 해결할 수 있는 프로그래밍 방법이라고 생각하면 된다.

구조

디자인 패턴의 구조는 3가지다.

  • 콘텍스트: 문제가 발생하는 여러 상황을 기술한다.
  • 문제: 패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈들을 기술한다.
  • 해결: 문제를 해결하도록 설계를 구성하는 요소들과 그 요소들 사이의 관계, 책임, 협력 관계를 기술한다.

GoF 디자인 패턴

GoF(Gang of Four)은 에리히 감마, 리차드 헬름, 랄프 존슨, 존 블리시다스를 부르는 말이다. 이들은 디자인 패턴을 23가지로 정리하고 생성, 구조, 행위의 3가지로 분류했다.

생성 패턴

  • 생성 패턴은 객체 생성에 관련된 패턴이다.
  • 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.

예) 팩토리 메서드, 추상 팩토리, 빌더, 프로토타입, 싱글턴 패턴

구조 패턴

  • 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다.
  • 서로 다른 인터페이스를 지닌 2개의 객체를 묶어 단일 인터페이스를 제공하거나 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다.

예) 어댑터, 퍼사드, 브리지, 컴퍼지트, 플라이웨이트 패턴 등

행위 패턴

  • 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴이다.
  • 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 분배하면서 결합도를 최소화 하는 것에 중점을 둔다.

예) 커맨드, 인터프리터, 이터레이터, 미디에이터, 메멘토, 옵서버, 스테이트, 스트래티지, 비지터

UML과 디자인 패턴

컬레보레이션

  • 객체들이 특정 상황에서 수행하는 역할의 상호작용을 표현
  • 점선으로 된 타원 기호를 사용
  • 타원 내부에 협력을 필요로 하는 역할과 그것의 연결 관계를 표현

컬러보레이션 어커런스

  • 컬레보레이션 보다 더 구체적인 상황에서의 컬레보레이션의 적용을 표현한다.

순차 다이어그램

  • 객체들의 상호작용을 나타내는 다이어그램
  • 객체들 사이의 메시지 송신과 순서를 나타냄
  • 객체 이름:클래스 이름 형식으로 표기하고 한쪽을 생략해 표기한다
  • 객체 아래에 있는 점선은 생명선이고 생명선을 따라서 있는 사각형을 활성구간이라고 한다.
  • 객체 사이의 메시지는 화살표로 표시한다.
  • 화살표의 머리가 채워지지 않은것은 비동기 메시지
  • 머리부분이 채워진 것은 동기 메시지
  • <<create>>라는 메시지는 객체를 생성하는 메시지
  • <<destroy>>라는 메시지는 객체를 소멸시키고 객체 생명선 끝에 ‘×’를 넣는다.
  • 메시지 표현 방법 : [시퀀스 번호] [가드]: 반환 값:=메시지 이름([인자 리스트]), 메시지 이름 제외하고 모두 생략 가능
  • 가드는 메시지가 송신되는데 만족해야 하는 조건
  • 점선 화살표는 응답을 표현, 반드시 표시해야하는건 아니다.

UML은 모든 다이어그램에 다이어그램 경계, 타입, 이름을 포함한 레이블의 장소를 제공하는 프레임을 제공한다.

  • 프레임은 다이어그램을 에워싸는 박스로 표현한다
  • 모서리에는 다이어그램 타입과 이름을 넣는다
  • 시퀀스 다이어그램은 sd를 사용
  • 프레임을 사용하면 외부에서 특정 다이어그램을 참조하는 것이 쉽다
  • 이때는 ref 키워드를 사용해 다른 순차 다이어그램을 참조한다.
  • alt 키워드를 사용하여 분기 처리를 할 수 있다.
  • 그러나 시퀀스 다이어그램은 하나의 시나리오에 관한 객체 사이의 상호작용을 보여주는데 사용되어야 한다.
  • 반복역시 loop로 표현할 수 있다
  • 반복은 [가드]형식으로 나타낸다.