디자인 패턴 정복하기 - 1

dev_hwan·2023년 4월 19일
0


(이미지 출처 https://bgasparotto.com/design-patterns)

디자인 패턴 Design Pattern

디자인 패턴이란 프로그램을 설계할 때, 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약'형태로 만들어 놓은 것을 의미합니다.

다시말해, "효율적으로 좋은코드를 짜기위한 방법론"이라고 말할 수 있습니다.

디자인 패턴은 일반적인 문제에 대한 일반적인 해결책을 제공합니다.
이러한 패턴들은 다른 개발자나 개발팀에서도 쉽게 이해할 수 있고, 재사용이 용이하며, 검증된 해결책이므로 안정적이고 효율적인 소프트웨어를 만드는 데 도움을 줍니다.

디자인 패턴은 표준화되고 재사용 가능한 방식으로 이러한 문제를 해결하는 방법으로, 시간과 노력을 절약하고 더 나은 소프트웨어 디자인으로 이어질 수 있습니다.

전반적으로 디자인 패턴은 개발자들에게 강력한 도구가 될 수 있지만, 당면한 문제에 적합할 때에만 신중하게 사용할 필요성이 있습니다. 과도하게 사용하거나, 지나치게 복잡한 코드를 생성하지 않도록 주의해야 합니다.

뿐만 아니라 경우에 따라 디자인 패턴이 너무 경직되어 소프트웨어의 요구 사항에 적응하지 못할 수 있습니다. 이로 인해 소프트웨어의 유연성이 제한되고 나중에 변경하기가 더 어려워질 수 있습니다.

디자인 패턴의 요소

일반적으로 디자인 패턴에는 4가지 요소가 있습니다.

  • 패턴 이름(Name)
    • 각 디자인 패턴은 해당 패턴을 식별하는 고유한 이름을 가지고 있습니다.
  • 문제(Problem)
    • 문제는 디자인 패턴이 해결하려는 상황이나 문제를 설명합니다. 이는 개발자가 언제 해당 패턴을 사용해야 할지를 파악하고 패턴의 목적을 이해하는 데 도움이 됩니다.
  • 해결책(Solution)
    • 해결책은 디자인 패턴의 단계 또는 구성 요소를 설명합니다.
  • 결과(Consequence)
    • 결과는 디자인 패턴을 사용함으로써 얻을 수 있는 이점 및 대가에 대해 설명합니다.

디자인패턴의 구성

많은 디자인 패턴이 있지만 대표적 알려진 GoF의 23개 디자인 패턴을 위주로 소개하려고 합니다.
GoF의 디자인 패턴은 크게 생성 패턴, 구조 패턴, 행동 패턴으로 구분됩니다.

  1. 생성 패턴(Creational Patterns)

    • 객체 생성과 관련된 패턴으로, 객체를 생성하고 구성하는 방법에 대한 문제를 해결합니다.
    • 객체의 생성과 조합을 캡슐화해 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공합니다.
    • 예시로는, 팩토리 패턴, 추상 팩토리 패턴, 빌더 패턴, 싱글턴 패턴 등이 있습니다.
  2. 구조 패턴(Structural Patterns)

    • 클래스와 객체를 조합해 더 큰 구조를 만드는 방법에 대한 문제를 해결합니다.
    • 객체들 간의 관계를 구성하고 이를 조작하는 방법, 객체들을 더 큰 구조로 조합하는 방법, 인터페이스와 클래스를 활용하여 객체들의 관계를 구성하는 방법 등을 다룹니다.
    • 예시로는, 어댑터 패턴, 브리지 패턴, 컴포지트 패턴, 데코레이터 패턴 등이 있습니다.
  3. 행동 패턴(Behavioral Patterns)

    • 객체들이 상호작용하는 방법과 책임을 분산하는 방법에 대한 문제를 해결합니다.
    • 객체들 간의 행동을 구조화하고 이를 조작하는 방법, 행동의 일부분을 독립적으로 변경하는 방법, 상호작용의 느슨한 결합을 제공하는 방법 등을 다룹니다.
    • 예시로는, 전략 패턴, 템플릿 메소드 패턴, 옵저버 패턴, 커맨드 패턴 등이 있습니다.

디자인 패턴의 목록

아래는 GoF의 디자인 패턴을 중심으로 정리한 목록입니다.

CreationalStructuralBehavioral
추상 팩토리(Abstract Factory)어댑터(Adapter)책임연쇄(Chain of Responsability)
빌더(Builder)브릿지(Bridge)커맨드(Command)
팩토리 메서드(Factory Method)컴포지트(Composite)인터프리터(Interpreter)
프로토타입(Prototype)데커레이터(Decorator)반복자(iterator)
싱글톤(Singleton)파사드(Facade)중재자 패턴(Mediator)
 플라이웨이트(Flyweight)메멘토(Memento)
 프록시(Proxy)옵저버(Observer)
  스테이트(State)
  전략(Strategy)
  템플릿(Template)
  방문자(Visitor)

참고문헌

profile
내맘대로 주제잡고 재미로 글쓰는 개발일지 블로그 👨‍💻

0개의 댓글