객체 생성에 관련된 패턴
객체 생성과 조합을 캡슐화 → 특정 객체가 생성, 변경되어도 프로그램 구조에 크게 영향을 주지 않는 유연성 제공
빌더(Builder)
복합 객체를 생성할 때 객체를 생성/구현 방법을 분리
→ 동일한 생성 절차에서 다양한 표현 결과를 만들 수 있는 패턴
프로토타입(Prototype)
원형을 만들어 놓고, 기존 객체를 복제하여 필요한 부분만 수정하여 사용하는 패턴
팩토리메서드(Factory Method)
상위 클래스에서 객체를 생성하는 인터페이스를 정의, 하위 클래스에서 인스턴스를 생성하는 패턴
추상팩토리(Abstract Factory)
구체적인 클래스를 지정하지 않고 연관되거나 의존적인 객체의 조합을 만드는 인터페이스를 제공하는 패턴
싱글톤(Singleton)
전역변수를 사용하지 않고 객체를 하나만 생성, 전역적인 접근은 제공하는 패턴
클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
(서로 다른 인터페이스 2개를 묶어 단일 인터페이스로 제공하는 등)
브리지(Bridge)
기능의 클래스 계층과 구현의 클래스 계층을 연결, 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있도록 하는 패턴
컴포지트(Composite)
객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴
사용자가 단일/복합객체 모두 동일하게 다루도록 하는 패턴
데코레이터(Decorator)
기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴
기능 확장이 필요할 때 객체 간의 결합으로 유연하게 확장할 수 있게 해주어 상속의 대안으로 사용
퍼사드(Facade)
서브시스템에 있는 인터페이스 집합에 통합된 하나의 인터페이스를 제공하는 패턴
사용자의 측면에서 단순한 인터페이스 제공을 통해 접근성을 높일 수 있는 디자인 패턴
(시스템 구조에 대한 파악을 쉽게하고 오류에 대해서 단위별로 확인할 수 있게 함)
플라이웨이트(Flyweight)
다수의 객체로 생성될 경우 모두가 갖는 본질적인 요소를 클래스화하여 공유함으로써 메모리 절약, 클래스 경량화를 목적으로 하는 패턴
프록시(Proxy)
특정 객체에 접근하는 것을 통제하기 위해 객체의 매니저/자리채움자를 제공하는 패턴
미리 할당하지 않아도 되는 것들을 실제 이용할 떼 할당하게 하여 메모리 용량 절약 가능, 실제 객체를 드러나지 않게하여 정보은닉 가능
적응자(Adapter)
기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴
호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해줌
상속을 이용/위임을 이용하는 인스턴스 패턴의 두 가지 형태로 사용 됨
객체나클래스 사이의 알고리즘, 책임 분배에 관련된 패턴
한 객체가 혼자 수행할 수 없는 작업을 여러개의 객체로 어떻게 분배하고 객체 사이의 결합도를 최소화하는 것에 중점을 두는 패턴
중재자-미디에이터(Mediator)
한 집합에 속해있는 객체들의 상호 작용을 캡슐화하는 객체를 정의하는 패턴
중재자가 객체들이 직접 서로 참조하지 않도록하며 객체들간의 느슨한 연결을 촉진, 객체들의 상호작용을 독립적으로 다양화 시킬 수 있도록 함
해석자-인터프리터(Interpreter)
주어진 언어에 대해서 문법을 위한 표현수단을 정의하고, 해당 언어로 된 문장을 해석하는 해석기를 사용하는 패턴
반복자-이터레이터(Iterator)
컬렉션 구현 방법을 노출하지 않고 집합의 원소들을 순차적으로 접근할 수 있는 방법을 제공하는 패턴
템플릿메서드(Template Method)
상위 클래스에서 뼈대만 정의하고 나머지는 서브 클래스에서 구체화하는 방식
상위 클래스에는 추상메서드를 통해 기능 골격을 제공, 하위 클래스의 메서드에는 세부 처리를 구체화하는 방식
→ 코드 양을 감소, 유지보수 용이
관찰자-옵저버(Observer)
객체들 사이에 1 : N 의 의존관계를 정의하여 어떤 객체의 상태가 변할 때, 의존관계에 있는 모든 객체들이 통지받고 자동으로 갱신될 수 있게 만드는 패턴
상태(State)
객체 상태를 캡슐화하여 클래스함으로써 그것을 참조하게 하는 방식으로 상태가 변경될 때 행위를 변경하도록 허락하는 패턴
방문자-비지터(Visitor)
클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스 생성, 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴
객체의 구조는 변경하지 않으면서 기능만 따로 추가/확장 가능
커맨드(Command)
실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴
명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행
전략(Strategy)
동일 계열 알고리즘 군을 정의하고 캡슐화하여 상호 교환 가능하도록 만드는 패턴
행위 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 함
메멘토(Memento)
클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용하는 패턴
작업 취소(Undo) 기능을 개발할 때 사용
책임연쇄(Chain of Responsibility)
요청을 처리할 수 있는 처리 객체를 집합으로 만들어 부여함으로 결합을 느슨하기 위해 만들어진 패턴
요청을 처리할 수 있는 객체를 찾을 때 까지 집합 안에서 요청을 전달