보관함

디자인 패턴

 

생성 패턴(Creational Patterns)

  • 추상 팩토리 패턴 (AbstractFactory)
    • 동일한 주제의 다른 팩토리를 묶어 준다.
    • 클라이언트에서 구상 클래스를 지정하지 않으면서도 일군의 객체를 생성할 수 있도록 한다.
  • 빌더 패턴 (Builder)
    • 생성(construction)과 표기(representation)를 분리해 복잡한 객체를 생성한다
    • 제품을 여러 단계로 나눠서 만들 수 있도록 제품 생산 단계들을 캡슐화할 때
  • 팩토리 메서드 패턴 (Factory)
    • 생성할 객체의 클래스를 국한하지 않고 객체를 생성한다.
    • 생성할 구상 클래스를 서브클래스에서 결정한다.
  • 프로토타입 패턴 (Prototype)
    • 기존 객체를 복제함으로써 객체를 생성한다.
    • 어떤 클래스의 인스턴스를 만드는 것이 자원/시간을 많이 잡아먹거나 복잡한 경우
  • 싱글턴 패턴 (Singleton)
    • 한 클래스에 한 객체만 존재하도록 제한한다.
    • 딱 한 객체만 생성되도록 한다.

구조 패턴(Structural Patterns)

  • 어댑터 패턴 (Adaptor)
    • 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧씌운다.
    • 객체를 감싸서 다른 인터페이스를 제공한다.
  • 브리지 패턴 (Bridge)
    • 추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있다.
    • 구현 뿐만 아니라 추상화된 부분까지 변경시켜야 하는 경우
  • 합성 패턴(Composite)
    • 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있다.
  • 데코레이터 패턴 (Decorator)
    • 기존 객체의 매서드에 새로운 행동을 추가하거나 오버라이드 할 수 있다.
    • 객체를 감싸서 새로운 행동을 제공한다
  • 파사드 패턴 (Facade)
    • 많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공한다.
    • 일련의 클래스에 대해서 간단한 인터페이스를 제공한다.
  • 플라이웨이트 패턴 (Flyweight)
    • 다수의 유사한 객체를 생성·조작하는 비용을 절감할 수 있다.
    • 어떤 클래스의 인스턴스 한 개만가지고 여러 개의 “가상 인스턴스”를 제공하고 싶을 때
  • 프록시 패턴 (Proxy)
    • 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공한다.
    • 객체를 감싸서 그 객체에 대한 접근을 제어한다.

행위 패턴(Behavioral Patterns)

  • 책임연쇄 패턴(Chain of responsibility)
    • 일련의 처리 객체들에 명령을 대행
  • 커맨드 패턴 (Command)
    • 작업(action)과 매개변수를 묶어놓은 객체를 생성
    • 요청을 객체로 감싼다.
  • 해석자 패턴 (Interpreter pattern)
    • 특정 언어를 구현
    • 어떤 언어에 대한 인터프리터를 만들 때
  • 반복자 패턴 (Iterator pattern)
    • 내부 구조를 드러내지 않고 객체의 구성요소들을 순차적으로 접근
    • 컬렉션이어떤 식으로 구현되었는지 드러내진 않으면서도 컬렉션 내에 있는 모든 객체에 대해 반복 작업을 처리할 수 있게 한다.
  • 중개자 패턴 (Mediator pattern)
    • 둘 이상의 클래스가 가지고 있는 매서드 들을 알고 있는 유일한 클래스로 클래스들을 느슨하게 연결
    • 서로 관련된 객체 사이의 복잡한 통신과 제어를 한 곳으로 집중시키고자 할 때
  • 메멘토 패턴 (Memento pattern)
    • 객체를 이전 상태로 복구하는 능력 제공
    • 객체를 이전의 상태로 복구시켜야 하는 경우
  • 옵저버 패턴 (Observer)
    • 옵저버 객체들이 이벤트를 볼 수 있게 하는 패턴
    • 상태가 변경되면 다른 객체들한테 연락을 돌릴 수 있게 한다.
  • 상태 패턴 (State pattern)
    • 알고리즘의 개별 단계를 구현하는 방법을 서브클래스에서 결정한다.
  • 전략 패턴 (Strategy pattern)
    • 교환 가능한 행동을 캡슐화하고 위임을 통해서 어떤 행동을 사용할지 결정한다.
  • 템플릿 메서드 패턴 (Template method pattern)
    • 알고리즘의 개별 단계를 구현하는 방법을 서브클래스에서 결정한다.
  • 방문자 패턴 (Visitor pattern)
    • 다양한 객체에 새로운 기능을 추가해야 하는데 캡슐화가 별로 중요하지 않은 경우

 기타 패턴

  • 컴파운드 패턴 (Compound)
    • 반복적으로 생길 수 있는 일반적인 문제를 해결하기 위한 용도로 두 개 이상의 패턴을 결합해서 사용한는 것