IT 이론지식

디자인 패턴 (Design Pattern)

쥐PT 2024. 2. 27. 15:21
728x90
반응형
SMALL

디자인 패턴은 소프트웨어 디자인에서 발생하는 공통된 문제를 해결하기 위한 해결책입니다. GoF(Gang of Four)가 제안한 디자인 패턴은 크게 생성(Creational), 구조(Structural), 행동(Behavioral) 세 가지 카테고리로 분류됩니다. 이들을 모두 살펴보겠습니다.

생성(Creational) 디자인 패턴:

  1. Singleton (싱글톤)
    • 하나의 클래스가 오직 하나의 인스턴스만을 가지고 있는 것을 보장합니다.
  2. Factory Method (팩토리 메서드)
    • 객체 생성을 처리하는 인터페이스를 정의하고, 서브 클래스가 어떤 클래스의 인스턴스를 만들지 결정하게 합니다.
  3. Abstract Factory (추상 팩토리)
    • 관련된 객체들을 생성하는 인터페이스를 제공하며, 생성된 객체들의 집합을 제어합니다.
  4. Builder (빌더)
    • 복잡한 객체를 생성하고 표현하는 방법을 분리하여, 동일한 생성 프로세스에서 서로 다른 표현 결과를 만들 수 있게 합니다.
  5. Prototype (프로토타입)
    • 객체를 생성할 때 객체의 종류에 상관없이 복사를 사용하여 새로운 객체를 만듭니다.

구조(Structural) 디자인 패턴:

  1. Adapter (어댑터)
    • 호환되지 않는 인터페이스를 갖는 클래스들이 함께 작동할 수 있도록 인터페이스를 변환합니다.
  2. Bridge (브리지)
    • 추상화된 부분과 구현된 부분을 따로 분리하여, 서로 독립적으로 변경할 수 있도록 합니다.
  3. Composite (컴포지트)
    • 객체들을 트리 구조로 구성하여, 개별 객체와 복합 객체를 동일하게 처리할 수 있게 합니다.
  4. Decorator (데코레이터)
    • 객체의 동작을 확장하거나 변경할 수 있도록 합니다.
  5. Facade (퍼사드)
    • 복잡한 서브시스템에 대한 단순한 인터페이스를 제공합니다.
  6. Flyweight (플라이웨이트)
    • 객체들 사이에 가능한 많은 데이터를 공유하여 메모리 사용을 최적화합니다.
  7. Proxy (프록시)
    • 다른 객체에 대한 접근을 제어하기 위한 대리자를 제공합니다.

행동(Behavioral) 디자인 패턴:

  1. Chain of Responsibility (책임 연쇄)
    • 요청을 처리할 객체를 여러 개 연결하여, 요청을 보내는 객체와 처리할 객체를 분리합니다.
  2. Command (커맨드)
    • 작업을 객체로 캡슐화하여, 요청을 나중에 이루어질 수 있도록 큐에 넣거나 로깅 및 취소할 수 있게 합니다.
  3. Interpreter (인터프리터)
    • 언어를 해석하는 방법을 정의하고, 그에 대한 해석을 제공합니다.
  4. Iterator (반복자)
    • 컬렉션의 요소를 반복하는 방법을 표준화하여, 컬렉션을 동일하게 접근할 수 있게 합니다.
  5. Mediator (미디에이터)
    • 객체 간의 상호 작용을 캡슐화하여, 객체 간의 직접적인 상호 작용을 피하고 중재자를 통해 상호 작용합니다.
  6. Memento (메멘토)
    • 객체의 내부 상태를 캡슐화하여, 나중에 해당 객체를 이전 상태로 복원할 수 있게 합니다.
  7. Observer (옵서버)
    • 객체의 상태 변경을 관찰하고, 상태 변경이 발생할 때 종속 객체들에게 알립니다.
  8. State (상태)
    • 객체의 행동을 상태 객체로 캡슐화하여, 상태가 변경될 때마다 객체의 클래스를 변경합니다.
  9. Strategy (전략)
    • 알고리즘을 캡슐화하여, 실행 중에 변경할 수 있게 합니다.
  10. Template Method (템플릿 메서드)
    • 알고리즘의 구조를 변경하지 않고 알고리즘의 일부를 서브 클래스로 대체할 수 있게 합니다.
  11. Visitor (비지터)
    • 객체 구조를 통해 연산을 수행하는 방법을 캡슐화하여, 새로운 연산을 추가할 수 있게 합니다.

이러한 디자인 패턴은 소프트웨어 설계 시 자주 사용되며, 코드의 재사용성, 확장성 및 유지 보수성을 향상시킵니다. 개발자는 각 패턴의 특징을 이해하고 적절한 상황에서 적용함으로써 더 나은 소프트웨어를 개발할 수 있습니다.

728x90
반응형
LIST