디자인 패턴

joonsikryu·2022년 1월 15일
0

디자인 패턴의 이해

디자인 패턴이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 수 있는 해결책이라 할 수 있다.

패턴은 비슷하거나 동일한 양식 또는 유형들이 반복되어 나타난다는 의미이며, 문제와 해결책도 동일한 유형이나 양식을 통해 쉽게 찾을 수 있다.

디자인 패턴의 구조

  • 콘텍스트(context): 패턴이 적용될 수 있는 상황을 나타낸다.
  • 문제(problem): 패턴이 적용되어 해결될 필요가 있는 디자인 이슈들을 기술한다.
  • 해결(solution): 설계를 구성하는 요소들과 그 요소들 간의 관계를 기술한다.

아키텍처 패턴, 디자인 패턴, 관용구(idom)는 다음과 같이 구분한다.

  • 아키텍처 패턴: 컴포넌트의 구성과 컴포넌트 사이의 협조 방법을 패턴화한다.
    • 레이어 패턴
    • 파이프 & 필터 패턴
    • 브로커 패턴
  • 디자인 패턴: 컴포넌트의 내부 구조를 대상으로 클래스/객체의 구조와 협업 방법을 패턴화한다.
  • 관용구: 프로그래밍에서 자주 사용하는 기술 방법(코딩)을 패턴화한다.

GoF 디자인 패턴

생성(creational), 구조(structural), 행위(behavioral)로 분류하고 총 23 가지 패턴이 있다.

  • 생성 패턴(5가지)
    • 추상 팩토리(Abstract Factory)
    • 빌더(Builder)
    • 팩토리 메서드(Factory Method)
    • 프로토타입(Prototype)
    • 싱글턴(Singleton)
  • 구조 패턴(7가지)
    • 어댑터(Adapter)
    • 브리지(Bridge)
    • 컴퍼지트(Composite)
    • 데커레이터(Decorator)
    • 퍼사드(facade)
    • 플라이웨이트(Flyweight)
    • 프록시(Proxy)
  • 행위 패턴(11가지)
    • 책임 연쇄(Chain of Responsibility)
    • 커맨드(Command)
    • 인터프리터(Interpreter)
    • 이터레이터(Iterator)
    • 미디에이터(Mediator)
    • 메멘토(Memento)
    • 옵서버(Observer)
    • 스테이트(State)
    • 스트래티지(Strategy)
    • 템플릿 메서드(Template Method)
    • 비지터(Visitor)

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

구조 패턴은 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다.

행위 패턴은 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴이다.

10가지 주요 패턴

분류이름설명
생성추상 팩토리구체적인 클래스에 의존하지 않고 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공한다.
팩토리 메서드객체 생성 처리를 서브 클래스로 분리해 처리하도록 캡슐화한다.
싱글턴전역 변수를 사용하지 않고 객체를 하나만 생성하도록 한다. 생성된 객체는 어디에서나 참조할 수 있다.
구조컴퍼지트복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 한다.
데커레이터객체의 결합을 통해 기능을 동적으로 확장할 수 있다.
행위옵서버한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 의존 관계를 구성한다.
스테이트객체의 상태에 따라 행위 내용을 변경한다.
스트래티지행위를 클래스로 캡슐화해 동적으로 바꿀 수 있게 한다.
템플릿 메서드어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 특정 단계에서 수행하는 내역을 바꾼다.
커맨드실행될 기능을 캡슐화해 주어진 여러 기능을 재사용할 수 있는 클래스를 설계한다.

UML과 디자인 패턴

UML 2.0에서 컬레보레이션(collaboration) 도구로 디자인 패턴을 표현한다. 컬레보레이션으로 정확하게 표현하려면 구조적인 면행위적인 면을 모두 표현해야 한다.

구조적인 면은 어떤 요소들이 주어진 목적을 달성하기 위해 협력하는지 나타낸다.

행위적인 면은 협력을 위한 요소들의 상호작용을 나타낸다.

컬레보레이션

디자인 패턴은 목적을 달성하기 위한 역할들의 상호 협동 작업으로 간주할 수 있다. 그리고 UML에서는 객체들이 특정 상황에서 수행하는 역할의 상호작용을 컬레보레이션으로 작성한다.

협력 다이어그램(collaboration diagram)과 다르다. UML 2.0은 협력 다이어 그램 명칭을 통신 다이어그램으로 변경(communication diagram)으로 변경했다.

컬레보레이션은 점선으로 된 타원 기호를 사용한다. 타원 내부에는 협력을 필요로 하는 역할들과 그들 사이의 연결 관계를 표현한다.

컬레보레이션 어커런스(collaboration occurrence)는 더 구체적인 상황에서의 컬레보레이션을 표현한다.

순차 다이어그램

순차 다이어그램은 UML 2.0에서 객체들의 상호작용을 나타내는 다이어그램이다. 순차 다이어그램은 객체들 사이의 메시지 송신과 그들의 순서를 나타낸다.

객체를 가장 윗부분에 표현하고, 왼쪽에서 오른쪽으로 객체들을 나열한다. 객체는 '객체 이름: 클래스 이름'형식으로 표현한다(한쪽 생략 가능).

순차 다이어그램 구성 요소

  • 생명선(lifeline)은 객체 아래로 뻗는 점선인데, 해당 객체가 존재함을 나타낸다.
  • 활성구간(activation)은 생명선을 따라가면 나오는 좁고 긴 사각형이다. 이는 실제로 객체가 연산을 실행하는 상태임을 나타낸다.
  • 화살표는 객체 사이의 메시지를 나타낸다. 머리 부분이 비어있으면 비동기(asynchronous) 메시지다.
  • 가드는 메시지가 송신되는데 만족해야 하는 조건이다.
  • 점선 화살표는 응답 메시지를 표현한다.

순차 다이어그램은 가능한 한 시나리오만 표현해야 한다.

순차 다이어그램과 클래스 다이어그램의 관계

순차 다이어그램은 행위 측면에 중점을 두는 모델이고, 클래스 다이어그램은 시스템의 구조 측면에 중점을 둔 모델이다. 의미적 차이는 있지만 서로 밀접한 관계가 있으며 이들로 시스템을 모델링할 때 정합이 이루어져야 한다.

profile
기록용 블로그 입니다 :)

0개의 댓글