728x90
반응형
SMALL
디자인 패턴은 소프트웨어 디자인에서 발생하는 공통된 문제를 해결하기 위한 해결책입니다. GoF(Gang of Four)가 제안한 디자인 패턴은 크게 생성(Creational), 구조(Structural), 행동(Behavioral) 세 가지 카테고리로 분류됩니다. 이들을 모두 살펴보겠습니다.
생성(Creational) 디자인 패턴:
- Singleton (싱글톤)
- 하나의 클래스가 오직 하나의 인스턴스만을 가지고 있는 것을 보장합니다.
- Factory Method (팩토리 메서드)
- 객체 생성을 처리하는 인터페이스를 정의하고, 서브 클래스가 어떤 클래스의 인스턴스를 만들지 결정하게 합니다.
- Abstract Factory (추상 팩토리)
- 관련된 객체들을 생성하는 인터페이스를 제공하며, 생성된 객체들의 집합을 제어합니다.
- Builder (빌더)
- 복잡한 객체를 생성하고 표현하는 방법을 분리하여, 동일한 생성 프로세스에서 서로 다른 표현 결과를 만들 수 있게 합니다.
- Prototype (프로토타입)
- 객체를 생성할 때 객체의 종류에 상관없이 복사를 사용하여 새로운 객체를 만듭니다.
구조(Structural) 디자인 패턴:
- Adapter (어댑터)
- 호환되지 않는 인터페이스를 갖는 클래스들이 함께 작동할 수 있도록 인터페이스를 변환합니다.
- Bridge (브리지)
- 추상화된 부분과 구현된 부분을 따로 분리하여, 서로 독립적으로 변경할 수 있도록 합니다.
- Composite (컴포지트)
- 객체들을 트리 구조로 구성하여, 개별 객체와 복합 객체를 동일하게 처리할 수 있게 합니다.
- Decorator (데코레이터)
- 객체의 동작을 확장하거나 변경할 수 있도록 합니다.
- Facade (퍼사드)
- 복잡한 서브시스템에 대한 단순한 인터페이스를 제공합니다.
- Flyweight (플라이웨이트)
- 객체들 사이에 가능한 많은 데이터를 공유하여 메모리 사용을 최적화합니다.
- Proxy (프록시)
- 다른 객체에 대한 접근을 제어하기 위한 대리자를 제공합니다.
행동(Behavioral) 디자인 패턴:
- Chain of Responsibility (책임 연쇄)
- 요청을 처리할 객체를 여러 개 연결하여, 요청을 보내는 객체와 처리할 객체를 분리합니다.
- Command (커맨드)
- 작업을 객체로 캡슐화하여, 요청을 나중에 이루어질 수 있도록 큐에 넣거나 로깅 및 취소할 수 있게 합니다.
- Interpreter (인터프리터)
- 언어를 해석하는 방법을 정의하고, 그에 대한 해석을 제공합니다.
- Iterator (반복자)
- 컬렉션의 요소를 반복하는 방법을 표준화하여, 컬렉션을 동일하게 접근할 수 있게 합니다.
- Mediator (미디에이터)
- 객체 간의 상호 작용을 캡슐화하여, 객체 간의 직접적인 상호 작용을 피하고 중재자를 통해 상호 작용합니다.
- Memento (메멘토)
- 객체의 내부 상태를 캡슐화하여, 나중에 해당 객체를 이전 상태로 복원할 수 있게 합니다.
- Observer (옵서버)
- 객체의 상태 변경을 관찰하고, 상태 변경이 발생할 때 종속 객체들에게 알립니다.
- State (상태)
- 객체의 행동을 상태 객체로 캡슐화하여, 상태가 변경될 때마다 객체의 클래스를 변경합니다.
- Strategy (전략)
- 알고리즘을 캡슐화하여, 실행 중에 변경할 수 있게 합니다.
- Template Method (템플릿 메서드)
- 알고리즘의 구조를 변경하지 않고 알고리즘의 일부를 서브 클래스로 대체할 수 있게 합니다.
- Visitor (비지터)
- 객체 구조를 통해 연산을 수행하는 방법을 캡슐화하여, 새로운 연산을 추가할 수 있게 합니다.
이러한 디자인 패턴은 소프트웨어 설계 시 자주 사용되며, 코드의 재사용성, 확장성 및 유지 보수성을 향상시킵니다. 개발자는 각 패턴의 특징을 이해하고 적절한 상황에서 적용함으로써 더 나은 소프트웨어를 개발할 수 있습니다.
728x90
반응형
LIST
'IT 이론지식' 카테고리의 다른 글
BCNF (Boyce-Codd Normal Form) (0) | 2024.02.27 |
---|---|
S/MIME (Secure/Multipurpose Internet Mail Extension) (0) | 2024.02.27 |
CMMI (Capability Maturity Model Integration) (0) | 2024.02.27 |
UDDI (Universal Description Discovery and Integration) (0) | 2024.02.27 |
RDF (Resource Description Framework) (0) | 2024.02.27 |