📌 디자인 패턴 종류
![](/assets/img/cs/2022-06-19/Solid.png)
1️⃣ 생성 패턴
1. Builder 복잡한 인스턴스를 조립(Build)하여 만듬.
객체를 생성하는 방법(과정) ——– 분리 ——— 객체를 구현(표현)하는 방법
즉, 생성과 표기를 분리하여 복잡한 객체 생성
객체를 생성하는 방법과 구현하는 방법을 분리하여 복잡한 객체를 생성하는 패턴이다.
2. Prototype 일반적인 원형을 > 복사 > 필요한 부분만 수정하여 사용. 원형 인스턴스에서 > 생성할 객체타입 결정됨 > 생성할 때 갖춰짐
즉, 복제함으로써 객체를 생성
일반적인 원형을 복사하여 필요한 부분만 수정하여 사용하는 패턴
3. Factory Method 상위클래스 (인터페이스 정의) 하위클래스 (인스턴스 생성)
상위 클래스: 인스턴스를 만드는 방법만 결정 하위 클래스: 인스턴스의 생성을 책임지고 조작하는 함수들을 오버라이딩
객체의 클래스에 국한되지 않음
상위 클래스에서는 인스턴스를 만드는 방법만 결정하고 하위 클래스에서는 데이터 생성을 책임지고 조작하는 함수들을 오버라이딩하여 인터페이스와 실제 객체를 생성하는 클래스를 분리할 수 있는 특성을 갖는 패턴
4. Abstract Factory 구체적인 클래스 의존 X 서로 연관 + 의존적 객체의 조합을 만드는 인터페이스를 제공 생성된 클래스: 인터페이스(API) 제공 구체적인 구현은 Concreate Product 클래스에서 이루어지는 특징을 가진다.
구체적인 클래스 의존없이 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
5. Singleton
전역변수를 사용하지 않고 객체를 하나만 생성하도록 하여 어디든지 참조할 수 있도록 하는 디자인 패턴
2️⃣ 구조 패턴
6. Bridge
기능과 구현의 클래스 계층을 연결하고 구현부에서 추상계층을 분리하여 추상계층과 실제구현부를 독립적으로 확장할 수 있는 패턴
7. Decorator
구현되어 있는 클래스에 기능확장이 필요할 때, 객체 간 결합을 통해 동적으로 유연하게 확장해나가는 설계패턴
동적으로, 유연한, 상속의 대안
8. Facade
단순한 인터페이스를 제공함으로써 시스템의 결합도를 낮추어 접근성을 높일 수 있는 패턴
9. Flyweight
생성된 다수 객체의 본질적인 요소를 클래스 화하여 공유하면서 메모리 절약, 클래스 경량화를 목적으로 하는 디자인 패턴
10. Proxy
실제 객체에 접근하기 전에 대리 객체로 접근 전 필요한 행동을 하게 만들어 메모리 용량을 아낄 수 있으며 정보은닉의 이점을 갖는 패턴
11. Composite
객체 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴
12. Adapter
기존 생성 클라스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 생성하는 패턴. 상속이용 클래스패턴, 위임이용 인스턴스 패턴 두 가지 형태로 사용.
3️⃣ 행위 패턴
13. Mediator
중간에 객체간 통신을 통제하고 지시할 수 있는 역할을 하는 중재자를 통해 모든 것을 요구하여 통신 빈도수를 줄이는 패턴
14. Interpreter
언어의 다양한 해석, 분리된 구문 해석을 맡는 각각의 클래스를 생성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 패턴