본문 바로가기

소프트웨어/디자인패턴

[소프트웨어] 디자인 패턴에 대해서

사실 디자인 패턴은 대략 1990년대 건축분야에서 먼저 시도한 내용이며 건축가 크리스토퍼 알렉산더는 아래와 같이 정의했다.

각 패턴은 우리 주변에서 자주 반복해서 발생하는 문제와 그 문제를 해결하는 핵심을 기술해 동일한 일을 두 번 다시 하지 않고 해결할 수 있도록 한다.

적절한 격언으로써 "Don't reinvent the wheel"는 말을 예로 들을 수 있는데 굳이 스스로 해결하지 말고 해당 상황에 대해 이미 널리알려진 적절한 패턴을 도입해서 구조적인 취약점을 해결하라는 뜻으로 받아들일 수 있다.

디자인 패턴의 요소

  • Context : 상황, 패턴이 적용될 수 있는 상황
  • Problem : 문제, 해결될 필요가 있는 디자인 이슈
  • Solution : 해결, 문제를 해결할 수 있는 설계, 구현 방법이나 언어에 의존하지 않음

만약 개발자간의 상세 설계를 말로 대화하려고 하면 상호간에 이해나 생각이 다를 수 있다. 따라서 디자인 패턴을 이해하고 그것을 사용해 의사 소통하면 좀 더 명확하게 이해할 수 있으므로 생산성이 더욱 향상된다.

용어

  • 아키텍처 패턴 : 시스템을 구성하는 컴포넌트의 구성과 컴포넌트간 협조 방법을 패턴화, 레이어 패턴, 파이프&필터, 브로커 패턴이 대표적
  • 디자인 패턴 : 컴포넌트 내부의 클래스/객체의 구조와 협업 방법을 패턴화
  • 관용구 : 프로그램 언어 특유의 패턴, 자용하는 기술 방법 등

GOF 디자인 패턴

GOF는 Gang of Four의 약자로서 4명의 소프트웨어 개발자가 주로 사용하는 디자인 패턴에 대해서 정리한 것을 의미한다. 패턴을 3가지로 분류하고 총 23개의 디자인 패턴을 소개하는대 그 상세 내용은 아래와 같다.

패턴의 분류

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

읽기 좋은 글귀