ABOUT ME

Today
Yesterday
Total
  • 디자인 패턴(Design Pattern)이란?
    Computer Science/Design Pattern 2022. 2. 1. 01:25

    디자인 패턴이란?


    여러 사람들이 함께 개발 업무를 수행할 때, 가장 문제가 되는 것은 서로 만든 코드를 이해하는 것이다. 각자 개발 스타일도 다르고 프로젝트 규모가 커지다 보면 코드도 그만큼 길어지고 복잡해지기 때문이다. 이 모든 것은 결국 개발 업무가 지체되고 효율이 떨어지는 결과를 낳게 된다.

     

    디자인 패턴은 이를 어느 정도 해소시켜주기 위해 나온 개념이다. 미리 정해놓은 구조 혹은 패턴을 통해 어떻게 개발을 진행할 것인가 약속을 해둔다면 위와 같은 문제가 훨씬 적게 발생하기 때문이다. 비단 위와 같은 문제뿐 아니라 유지 보수와 최적화에도 도움이 된다. 때문에 대부분의 프로젝트에서는 특정 디자인 패턴을 정해놓고 사용한다.

     

    물론 굳이 특정 디자인 패턴을 사용하지 않아도 되는 경우에는 억지로 사용할 필요가 없다. 어쨌든 효율적인 개발을 위해 사용하는 것이고, 모든 문제의 해결 방법 또한 아니기 때문이다.

     

     

     

    디자인 패턴의 종류


    디자인 패턴은 크게 '생성 패턴', '구조 패턴', '행위 패턴' 이렇게 세 종류로 나눠진다. 모든 디자인 패턴을 여기서 설명하기엔 무리가 있다. 애초에 내가 모든 디자인 패턴을 알고 있지도 않고. 때문에 각 디자인 패턴은 하나둘씩 공부하면서 따로 게시글을 작성해 정리하도록 하고, 이번 글에서는 종류별로 대표적인 디자인 패턴들이 어떤 것이 있는지 가볍게 살펴보도록 하겠다.

     

    생성 패턴


    • 싱글톤(Singleton)
      가장 유명한 디자인 패턴으로 인스턴스가 유일하게 단 하나 있다는 것을 보장하는 패턴
    • 추상 팩토리(Abstract Factory)
      구체적인 클래스는 지정하지 않고, 객체 생성 관련 인터페이스를 제공하는 패턴
    • 팩토리(Factory Method)
      객체 생성을 위한 인터페이스를 정의하고, 인스턴스화 될 클래스를 서브클래스에서 결정하는 패턴
    • 빌더(Builder)
      인스턴스를 빌더라는 내부 클래스를 통해 생성하게 하여 동일한 생성 과정을 만들어주는 패턴
    • 원형(Prototype)
      하나의 프로토타입을 만들어주고 이를 복사하여 새 개체를 생성하는 패턴

     

    구조 패턴


    • 브릿지(Bridge)
      구현과 추상을 분리해 각각 독립성을 높인 패턴
    • 어댑터(Adapter)
      특정 클래스 인터페이스를 원하는 다른 인터페이스로 변환하는 패턴
    • 파사드(Facade)
      여러 서브 시스템에 존재하는 공통적인 기능을 단순화된 상위 수준의 인터페이스를 통해 제공해주는 패턴
    • 데코레이터(Decorator)
      특정 객체에 동적으로 기능을 추가하는 패턴
    • 플라이웨이트(Flyweight)
      많은 수의 객체를 생성해야 할 때, 비슷한 객체들끼리 데이터를 공유하도록 하는 패턴
    • 프록시(Proxy)
      특정 개체에 접근할 때, 직접 접근하는 것이 아니라 대리자(surrogate) 역할 객체를 제공하는 패턴
    • 컴포지트(Composite)
      객체 사이의 관계를 트리구조로 만들어 계층을 표현하는 패턴

     

    행위 패턴


    • 인터프리터(Interpreter)
      언어 문법을 위한 클래스를 만들고 이를 통해 언어를 정의 혹은 확장하는 패턴
    • 커맨드(Command)
      객체 형태로 캡슐화된 기능을 통해 재사용할 수 있는 클래스를 설계하는 패턴
    • 책임 체인(Chain of Resposibility)
      요청을 처리하는 처리 객체 집합을 통해 송신자와 수신자 사이의 결합도를 없애는 패턴
    • 반복자(Iterator)
      컬렉션 내부를 노출시키기 않고 컬렉션 내부 항목에 접근할 수 있도록 하는 패턴
    • 중재자(Mediator)
      클래스 사이의 모든 로직을 캡슐화하고 하나의 클래스에게 처리하도록 하는 패턴
    • 방문자(Visitor)
      방문자(visitor)와 방문 장소(element)를 분리해 방문자가 방문하면 로직을 실행하는 패턴
    • 옵저버(Observer)
      객체 상태 변화를 감지하고 변화가 생기면 자동으로 갱신하는 패턴
    • 메멘토(Memento)
      미리 저장해둔 객체의 상태 정보를 통해 객체를 이전 상태로 되돌리기 위해 사용하는 패턴
    • 전략(strategy)
      특정 상황에서 알고리즘을 동적으로 적용할 수 있도록 알고리즘을 분리하는 패턴
    • 상태(state)
      객체의 특정 상태를 미리 클래스로 선언해두고 해당 클래스 내부에 특정 상태에 실행될 메소드를 정의해두는 패턴
    • 템플릿 메소드(Template Method)
      전체적인 구조는 그대로 두고, 서브 클래스 수행 내역만 수정하는 패턴

    댓글

Designed by Tistory.