객체 생성에 대한 패턴 / 캡슐화+유연성 목표
| 종류 | 설명 |
|---|---|
| 팩토리 메소드 (Factory Method) | 상위 클래스는 객체를 생성하는 인터페이스만 제공하고,하위 클래스에서 인스턴스 생성 |
| 프로토타입 (Prototype) | Prototype 먼저 생성하고, 인스턴스를 복제하여 사용, 비용 저렴 |
| 싱글톤 (Singleton) | 클래스 내 생성되는 인스턴스가 하나만 필요할 때 사용(동시참조X) |
| 빌더 (Builder) | 분리된 인스턴스를 조합하여 객체 생성. 같은 객체를 생성해도 다른 결과를도출할 수 있음 |
| 추상 팩토리 (Abstract Factory) | 상위 클래스의 객체 생성코드를 하위클래스가 상속받는다(상위변경=하위자동변경) |
구조가 복잡한 시스템 개발에 도움
| 종류 | 설명 |
|---|---|
| 어댑터(Adapter) | 일치하지 않는 인터페이스 변환(전류 어댑터와 같은 역할) 기존에 구현되어 있는 클래스에 기능 발생 시 기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할 |
| 브릿지(Bridge) | 추상층(기능)과 구현층(구체화)을 분리하여 서로 독립적 확장 가능 |
| 합성(Composite) | 트리구조로 구성 |
| 데코레이터(Decorator) | 클래스에 기능을 추가하기 위해 다른 객체를 덧붙이는 형태 |
| 프록시(Proxy) | 접근이 어려운 객체에 접근할 수 있도록 인터페이스 역할 수행 |
상호작용이나 책임 분배에 대한 부분을 정의하고 결합도는 최소화 하는 것이 목표
| 종류 | 설명 |
|---|---|
| 중재자(Mediator) | 객체간의 통제와 지시의 역할을 하는 중재자를 두어 객체지향 목표 달성하게 해줌 (상호작용을 캡슐화하여 결합도를 낮추기위해 사용) |
| 상태(State) | 이벤트를 객체 상태에 따라 다르게 처리해야할 때 사용. 카톡 알림설정 같은 느낌 |
| 책임 연쇄(Chain of Responsibility) | 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴. 각 객체들이 고리(Chain)으로 묶여있어 요청이 해결될 때까지 고리를 따라 책임이 넘어간다. |
| 커맨드(Command) | 명령어를 캡슐화하여 재사용하거나 취소할 수 있도록 필요한 정보를 로그에 남기는 형태 |
| 인터프리터(Interpreter) | 언어에 문법 표현을 정의하는 패턴 |
| 반복자(Iterator) | 접근이 잦은 객체는 동일한 인터페이스를 사용하도록 하는 패턴 |
| 중재자(Mediator) | 상호작용을 캡슐화하여 결합도를 낮추기위해 사용 |
| 메멘토(Memento) | 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴이다. Ctrl+Z 기능이 이 패턴의 대표적 기능 |
| 옵저버(Observer) | 이벤트 발행과 구독, 상태 변화 전달. 한 객체의 상태가 변화하면 객체에 상속되어있는 다른 객체들에게 변화된 상태를 전달하는 패턴. 카톡의 읽음표시 같은 느낌 |
| 전략(Strategy) | 동일 계열 알고리즘 상호 교환, 독립적 사용 |
| 템플릿 메소드(Template Method) | 상위에서 인터페이스를 정의하고 하위에서 구체화시킴 (유지보수 쉬워짐) |
| 방문자(Visitor) | 처리 기능을 별도의 클래스로 구성. 분리된 처리 기능은 각 클래스를 방문(Visit)하여 수행한다. |