객체를 생성하는 방법을 추상화하여 객체를 생성, 조합 및 표현하는 방법을 정의한다. 패턴의 생성과 초기화를 다루기 때문에, 프로그램의 유지 보수성과 확장성을 향상시키는데 도움이 된다.
Singleton(싱글톤) : 전역 변수를 사용하지 않고 단 하나의 인스턴스를 생성하고, 이를 통해 접근하도록 하는 패턴
클래스의 인스턴스가 오직 하나만 존재하도록 보장하고, 다른 객체들이 해당 인스턴스에 접근할 수 있도록 한다.
Factory Method(팩토리 메서드) : 객체를 생성하는 인터페이스를 정의하고, 이를 서브 클래스에서 구현하여 객체 생성을 캡슐화하는 패턴
객체 생성을 하위클래스에서 위임함으로써, 객체 생성에 대한 유연성을 높이고 객체 생성 코드를 중앙 집중화한다.
Abstract Factory(추상 팩토리) : 관련된 객체들의 집합을 생성하는 인터페이스를 제공하는 패턴이다.
객체들의 생성과 조합을 추상화하여, 서로 다른 구현 클래스를 사용해 다양한 종류의 객체들을 생성할 수 있도록 한다.
Builder(빌더) : 복잡한 객체를 생성하는 과정을 단순화하기 위해 사용되는 패턴이다.
객체를 생성하는 과정을 단계별로 분리하여, 여러 단계에서 객체를 생성하고 초기화할 수 있다.
Prototype(프로토타입) : 이미 존재하는 객체를 복제함으로써 새로운 객체를 생성하고 초기화화는 과정을 간소화 하는 패턴이다.
객체와 클래스 간의 관계를 다룬다. 이런 패턴은 다른 객체들 과의 관계, 즉 상속이나 인터페이스 구현 등을 통해 클래스를 조합하여 더 복잡한 구조를 만들 수 있다.
Adapter(어댑터) : 호환되지 않는 인터페이스들을 함께 동작할 수 있도록 변환하는 패턴이다. 서로 다른 인터페이스를 가진 두 객체 사이에서 인터페이스를 중간에 삽입해 두 객체가 함께 동작할 수 있도록 한다.
Bridge(브릿지) : 추상화와 구현을 분리하여 서로 독립적으로 확장할 수 있는 구조를 만드는 패턴이다. 구현부와 추상화 부분을 서로 분리함으로써, 서로 다른 구현체를 자유롭게 조합할 수 있다.
Composite(컴포지트) : 객체들의 계층 구조를 포현하는 패턴
단일 객체와 복합 객체를 동일한 인터페이스로 다룰 수 있도록 하여, 객체의 계층구조를 표현하고 트리 구조를 만들 수 있다.
Decorator(데코레이터) : 객체에 새로운 기능을 동적으로 추가할 수 있도록 하는 패턴이다.
객체의 코어 기능을 변경하지 않고, 새로운 동작을 추가하여 객체의 기능을 확장한다.
Facade(퍼사드) : 복잡한 시스템에 대한 단순화된 인터페이스를 제공하는 패턴이다.
복잡한 시스템의 일부분을 숨기고, 사용자에게 간단한 인터페이스만 노출시켜서 사용자가 더 쉽게 시스템을 사용할 수 있도록 한다.
Flyweight(플라이웨이트) : 객체를 공유하여 메모리 사용량을 최소화하는 패턴이다.
동일한 객체를 여러 개 생성하지 않고, 객체를 공유하여 메모리 사용량을 줄일 수 있다.
Proxy(프록시) : 다른 객체에 대한 대리자나 자리채움 역할을 하는 패턴이다.
객체에 대한 접근을 제어하거나, 객체의 생성과 초기화를 지연시켜 성능을 개선할 수 있다.
객체들이 서로 상호작용하는 방법과 역할을 중심으로 다루는 패턴이다. 이러한 패턴은 객체들 간의 행동과 상호작용을 조정하여, 시스템을 보다 유연하고 확장 가능하도록 만든다.
- Chain of Responsibility(책임 연쇄) : 요청을 처리할 객체들의 연결(체인)을 만들어 처리할 객체를 동적으로 지정하는 패턴이다. 요청을 처리할 객체가 결정되지 않은 경우, 체인의 다음 객체에게 요청을 전달하여 요청을 처리한다.
- Command(커맨드) : 요청을 객체의 형태로 캡슐화하여 실행할 수 있는 패턴이다.
실행할 요청을 객체화함으로써, 요청을 처리할 수 있는 여러 객체들과 요청을 분리하여 실행할 수 있다.
- Interpreter(인터프리터) : 문법 규칙을 클래스화하여 처리하는 패턴이다.
문법 규칙을 객체로 나타내고, 이를 해석하여 실행하는 방식으로 동작한다.
- Iterator(이터레이터) : 집합체(컬렉션) 내부의 요소들을 순차적으로 접근하는 패턴이다.
집합체의 내부 구조를 노출하지 않으면서, 집합체 내부의 요소들에 접근할 수 있다.
- Mediator(미디에이터) : 객체들 간의 복잡한 상호작용을 캡슐화하여 객체들 간의 결합도를 낮추는 패턴이다.
중재자 역할을 하는 객체를 이용하여, 객체들 간의 직접적인 상호작용을 줄여서 객체들 간의 결합도를 낮출 수 있다.
- Memento(메멘토) : 객체의 상태 정보를 저장하고, 이를 복원하는 패턴이다.
객체의 상태를 저장하고, 이를 복원하여 객체의 이전 상태로 돌아갈 수 있다.
- Observer(옵저버) : 객체들 간의 일대다 의존성 관계를 정의하는 패턴이다.
한 객체의 상태 변화에 대해 다수의 객체에게 자동으로 알리며, 객체 간의 결합도를 낮출 수 있다.
- State(상태) : 객체의 내부 상태에 따라 행동을 변경하는 패턴이다.
객체의 상태를 클래스로 표현하여, 상태에 따라 다른 행동을 하도록 할 수 있다.
- Strategy(전략) : 객체들이 동일한 문제를 해결하기 위해 상호 교환 가능한 알고리즘을 캡슐화하여 정의하는 패턴이다.
알고리즘을 인터페이스로 정의하고, 알고리즘을 캡슐화하여 객체로 만들어 컨텍스트(Context)에서 알고리즘을 변경할 수 있도록 한다.
- Template Method(템플릿 메서드) : 상위 클래스에서 처리의 뼈대를 정의하고, 하위 클래스에서 구체적인 처리를 구현하는 패턴이다.
상위 클래스에서 처리의 뼈대를 정의하고, 하위 클래스에서는 상위 클래스에서 정의한 뼈대에 맞추어 구체적인 내용을 구현한다.
- Visitor(방문자) : 객체 구조를 이루는 요소(Element)에 대해 처리를 수행하는 연산(Operation)을 캡슐화하는 패턴이다.
구조를 이루는 객체(Element)와 처리를 수행하는 객체(Operation)를 분리하여 유연한 구조를 만들 수 있다.
각 요소(Element)에서는 자신을 전달하여 처리를 위임하며, 처리를 수행하는 객체(Operation)에서는 요소(Element)의 타입에 따라 처리를 다르게 한다.