728x90

디자인 패턴이란


  • 디자인 패턴 은 소프트웨어 디자인에서 일반적으로 발생하는 문제에 대한 일반적인 솔루션이다.
  • 이는 코드에서 반복되는 디자인 문제를 해결하기 위해 사용자 지정할 수 있는 미리 만들어진 청사진과 같다고 생각하면 좋다고 한다.
  • 패턴은 특정 문제를 해결하기 위한 일반적인 개념이다.
  • 패턴과 알고리즘 두 개념 모두 알려진 문제에 대한 일반적인 솔루션을 설명하기 때문에 비슷해 보이지만 다르다.
    • 알고리즘은 항상 어떤 목표를 달성할 수 있는 명확한 일련의 작업을 정의하고 요리법에 비유될 수 있다.
    • 패턴은 솔루션에 대한 보다 높은 수준의 설명이다. 프로그램 개발 시에 자주 부닥치는 애로 상황에 대한 일반적이고 재사용 가능한 추상화된 해결책이다.
      • 결과와 그 기능이 무엇인지 볼 수 있지만 정확한 구현 순서는 사용자에게 달려 있다.

디자인 패턴 장점


  1. 개발자(설계자) 간의 원활한 의사소통
    • 여러 디자인 패턴의 특성을 잘 알고 있어 문제해결 시 어떤 디자인 패턴을 사용하면 좋을지 해결책을 논의할 수 있다.
  2. 소프트웨어 구조 파악 용이
    • 디자인 패턴의 특성을 잘 알고 있기에 어떤 디자인 패턴이 설계할 때 사용되었는지 알면 소프트웨어 전체구조를 쉽게 파악 가능하다.
  3. 재사용을 통한 개발 시간 단축
    • 이미 만들어 놓은 디자인 패턴을 사용하므로 개발시간을 단축시킬 수 있다.
  4. 설계 변경 요청에 대한 유연한 대처
    • 사용자의 지속적인 추가 요청, 환경 변화 등의 설계 변경 요청에 쉽고 빠르게 대처 가능하다

디자인 패턴 단점


잘못된 대상을 문제로 할 수 있다.

  • 보통 패턴의 필요성은 추상화 능력이 부족한 컴퓨터 언어나 기술을 사용할 때 일어난다.
  • 이럴 때 패턴은 언어에 반드시 필요한 조잡한 인터페이스가 된다.

비효율적인 솔루션

  • 디자인 패턴의 아이디어는 이미 승인된 모범 사례를 표준화하려는 시도이다.
  • 원칙적으로 이것은 유익하게 보일 수 있지만, 실제로는 종종 불필요한 코드 중복을 초래한다.
  • "거의 만족스럽지 못한" 설계 패턴보다는 잘 구성된 구현을 사용하는 것이 더 효율적인 솔루션일 수 있다.

잘못되고 무분별한 사용

  • 패턴에 대해 배운 후 더 간단한 코드가 잘 작동하는 상황에서도 패턴을 어디에나 적용하려고 하면 비효율적일 수 있다.

패턴의 종류


패턴의 분류 기준

  • 목적(purpose)
    • 패턴이 무엇을 하는지에 따라 분류
    • 생성 패턴 : 객체의 생성 과정에 관여하는 패턴
    • 구조 패턴 : 클래스나 객체의 합성에 관한 패턴
    • 행동 패턴 : 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의하는 패턴
  • 범위(scope)
    • 패턴을 적용하는 범위에 따라 분류
    • 클래스 패턴 : 클래스와 서브클래스 간의 관련성을 다루는 패턴
      • 관련성은 주로 상속이며, 컴파일 타임에 정적으로 결정된다.
    • 객체 패턴 : 객체 관려성을 다루는 패턴으로서, 런타임에 변경할 수 있으며 더 동적인 성격을 가진다.
      • 대부분의 패턴들은 어느정도 상속을 이용한다.
      • 23개의 패턴중 대부분 객체 패턴이다.

)

생성 패턴(Creational Patterns)

인스턴스를 만드는 절차를 추상화하는 패턴, 다양한 객체 생성 메커니즘을 제공하여 기존 코드의 유연성과 재사용성을 향상시킨다.

  • 싱글톤 패턴(Singleton)
  • 추상팩토리 패턴(Abstract Factory)
  • 빌더 패턴(Builder)
  • 팩토리 메서드 패턴(Factory Method)
  • 원형 패턴(Prototype)

구조 패턴(Structural Patterns)

객체 및 클래스를 보다 큰 구조로 조립하는 동시에 이러한 구조를 유연하고 효율적으로 유지하는 패턴

  • 적응자 패턴(Adapter or Wrapper)
  • 브리지 패턴(Bridge)
  • 데코레이터 패턴(Decorator)
  • 퍼사드 패턴(Facade)
  • 프록시 패턴(Proxy)

행위 패턴(Behavioral Patterns)

어떤 처리의 책임을 어느 객체에 할당하는 것이 좋은지, 알고리즘을 어느 객체에 정의하는 것이 좋은지 다루는 패턴

  • 옵저버 패턴(Observer)
  • 상태 패턴(State)
  • 전략 패턴(Strategy)
  • 템플릿 메서드 패턴(Template method)
  • 비지터 패턴(Visitor)
  • 역할 사슬 패턴(Chain of Responsibility)
  • 커맨드 패턴(Command)
  • 인터프리터 패턴(Interpreter)
  • 이터레이터 패턴(Iterator)
  • 미디에이터 패턴(Mediator)

참고 문헌 및 출처


  • GoF의 디자인 패턴(개정판) / 에릭 감마, 리처드 헬름, 랄프 존슨, 존 블라시디스 공저 / 김정아 역
  • https://refactoring.guru/
728x90

+ Recent posts