구조 패턴 (Structural Patterns)
💡 구조 패턴은 구조를 유연하고 효율적으로 유지하면서 객체들과 클래스들을 더 큰 구조로 조립하는 방법
- 어댑터 패턴(Adapter)
- 호환되지 않는 인터페이스를 가진 객체들이 협업할 수 있도록 한다.
- 또는 Wrapper로도 불린다.
- 어댑터 패턴(Adapter)
- 브릿지 패턴(Bridge)
- 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조(추상화 및 구현)로 나눈 후 각각 독립적으로 개발할 수 있도록 한다.
- 브릿지 패턴 (Bridge)
- 복합체 패턴(Composite)
- 객체들을 트리 구조들로 구성한 후, 이러한 트리 구조들이 개별 객체들인 것처럼 작업할 수 있도록 하는 디자인 패턴이다.
- 복합체 패턴 (Composite)
- 데코레이터 패턴(Decorator)
- 객체들을 새로운 행동들을 포함한 특수 래퍼 객체들 내에 넣어서 위 행동들을 해당 객체들에 연결시킨다.
- 래퍼(wrapper)라고도 불린다.
- 데코레이터 패턴(Decorator)
- 퍼사드 패턴(Facade)
- 라이브러리, 프레임워크 또는 다른 클래스들의 복잡한 집합에 대한 단순화된 인터페이스를 제공한다.
- 퍼사드 패턴(Facade)
- 플라이웨이트 패턴(Flyweight)
- 각 객체에 모든 데이터를 유지하는 대신 여러 객체 간에 상태의 공통 부분들을 공유하여 사용할 수 있는 메모리에 더 많은 객체를 포함할 수 있도록 한다.
- 캐시라고도 불린다.
- 플라이웨이트 패턴(Flyweight)
- 프록시 패턴(Proxy)
- 다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있다.
- 프록시는 해당 객체에 대한 접근을 제어하므로, 요청이 해당 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 한다.
- 프록시 패턴(Proxy)
생성 패턴 (Creational Patterns)
💡 생성 디자인 패턴은 기존 코드의 유연성과 재사용을 증가시키는 객체를 생성하는 다양한 방법을 제공한다.
- 팩토리 메서드 (Factory Method)
- 부모 클래스에서 객체를 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체의 유형을 변경할 수 있도록 한다.
- 팩토리 메서드 (Factory Method)
- 추상 팩토리 (Abstract Factory)
- 관련 객체들의 구상 클래스들을 지정하지 않고도 그들의 패밀리들을 생성할 수 있다.
- 추상 팩토리(Abstract Factory)
- 빌더 패턴(Builder)
- 복잡한 객체들을 단계별로 생성할 수 있도록 한다. 이 패턴은 같은 생성코드를 사용하여 객체의 다양한 유형들과 표현을 생성할 수 있다.
- 빌더 패턴(Builder)
- 프로토타입 패턴(Prototype)
- 코드를 그들의 클래스들에 의존시키지 않고 기존 객체들을 복사할 수 있도록 한다.
- 클론으로도 불린다.
- 프로토타입 패턴
- 싱글턴 패턴(Singleton)
- 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공한다.
- 싱글턴 패턴(Singleton)
행동 패턴(Behavioral Patterns)
- 책임 연쇄 패턴(CoR : Chain of Responsibility)
- 일련의 핸들러들의 사슬을 따라 요청을 전달할 수 있게 해주는 행동 디자인 패턴
- 각 핸들러는 요청을 받으면 요청을 처리할지 아니면 체인의 다음 핸들러로 전달할지 결정한다.
- 커맨드 사슬 이라고도 불린다.
- 책임 연쇄 패턴(CoR : Chain of Responsibility)
- 커맨드 패턴(Command)
- 요청을 요청에 대한 모든 정보가 포함된 독립 실행형 객체로 변환.
- 이 변환은 다양한 요청들이 있는 메서드들을 인수화할 수 있도록 하며, 요청의 실행을 지연 또는 대기열에 넣을 수 있도록 하고, 또 실행 취소할 수 있는 작업을 지원할 수 있도록 한다.
- 액션, 트랜잭션 이라고도 불린다.
- 커맨드 패턴(Command)
- 반복자 패턴(Iterator)
- 컬렉션의 요소들의 기본 표현(리스트, 스택, 트리 등)을 노출하지 않고 그들을 하나씩 순회할 수 있도록 한다.
- 반복자 패턴(Iterator)
- 중재자 패턴(Mediator)
- 객체 간의 혼란스러운 의존 관계들을 줄일 수 있다.
- 객체 간의 직접 통신을 제한하고 중재자 객체를 통해서만 협력하도록 한다.
- 중개인, 컨트롤러 라고도 불린다.
- 중재자 패턴(Mediator)
- 메멘토 패턴(Memento)
- 객체의 구현 세부 사항을 공개하지 않으면서 해당 객체의 이전 상태를 저장하고 복원할 수 있게 한다.
- 스냅샷이라고도 불린다.
- 메멘토 패턴(Memento)
- 옵저버 패턴(Observer)
- 여러 객체에 자신이 관찰 중인 객체에 발생하는 모든 이벤트에 대하여 알리는 구독 매커니즘을 정의할 수 있도록 한다.
- 이벤트 구독자, 경청자 라고도 불린다.
- 옵저버 패턴(Observer)
- 상태 패턴(State)
- 객체의 내부 상태가 변경될 때 해당 객체가 그의 행동을 변경할 수 있도록 한다.
- 객체가 행동을 변경할 때 객체가 클래스를 변경한 것처럼 보일 수도 있다.
- 상태 패턴(State)
- 전략 패턴(Strategy)
- 알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스들에 넣은 후 그들의 객체들을 상호교환할 수 있도록 한다.
- 전략 패턴(Strategy)
- 템플릿 메서드(Template Method)
- 부모 클래스에서 알고리즘의 골격을 정의하지만, 해당 알고리즘의 구조를 변경하지 않고 자식 클래스들이 알고리즘의 특정 단계들을 오버라이드(재정의) 할 수 있도록 한다.
- 템플릿 메서드(Template Method)
- 비지터 패턴(Visitor)
- 알고리즘들을 그들이 작동하는 객체들로부터 분리 할 수 있다
- 비지터 패턴(Visitor)
'디자인 패턴(Design Pattern)' 카테고리의 다른 글
SOLID 원칙 (0) | 2024.02.25 |
---|---|
디자인 패턴이란? (0) | 2024.02.25 |