디자인 패턴
1. 디자인 패턴
- SW 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴
2. 디자인 패턴 유형
- 목적
유형 | 설명 |
생성 | 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴 |
구조 | 더 큰 구조 형성 목적으로 클래스 or 객체의 조합을 다루는 패턴 |
행위 | 클래스 or 객체들이 상호 작용하는 방법과 역할 분담을 다루는 패턴 |
※ 디자인 패턴 구성요소
구성요소 | 설명 |
패턴의 이름 | 디자인 패턴을 부를 때 사용하는 이름 |
문제 및 배경 | 디자인 패턴이 사용되는 분야 or 배경 |
솔루션 | 디자인 패턴을 이루는 요소들 |
사례 | 디자인 패턴의 간단한 적용 사례 |
결과 | 디자인 패턴을 사용하면 얻는 이점 or 영향 |
샘플 코드 | 디자인 패턴이 적용된 원시 코드 |
3. 디자인 패턴 종류
- 생성 패턴
패턴 | 설명 |
Builder (빌더) |
- 복잡한 인스턴스를 조립해 만드는 구조 |
Prototype (프로토타입) |
- 처음부터 일반적인 원형을 만든 후, 그것을 복사한 뒤, 필요한 부분만 수정해 사용하는 패턴 |
Factory method (팩토리 메서드) |
- 상위 클래스에서 인터페이스 정의, 하위 클래스에서 인스턴스 생성 |
Asbstract factory (앱스트랙 팩토리) |
- 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공 |
Singleton (싱글톤) |
- 전역 변수를 사용하지 않고 객체 하나만 생성, 그 객체는 어디서든지 참조할 수 있음 - 한 클래스에 한 객체만 존재 |
- 구조 패턴
패턴 | 설명 |
Adapter (어댑터) |
기존에 생성된 클래스를 재사용할 수 있도록, 중간에서 맞춰주는 역할 |
Bridge (브릿지) |
기능 계층과 구현 계층을 연결, 구현부에서 추상 계층 분리 |
Composite (컴포지트) |
객체들의 관계를 트리 구조로 구성 |
Decorator (데코레이터) |
기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나감 |
Facade (퍼사이드) |
복잡한 시스템에 대해 단순한 인터페이스를 제공, 시스템 구조에 대한 파악을 쉽게 함 |
Flyweight (플라이웨이트) |
메모리 절약, 클래스의 경량화를 목적 |
Proxy (프록시) |
실제 객체에 대한 대리 객체 |
- 행위 패턴
패턴 | 설명 |
Mediator (미디에이터) |
중간에서 통제, 중재자 |
Interpreter (인터프리터) |
언어의 다양한 해석, 구문의 해석을 맡는 클래스를 각각 작성 |
Iterator (이터레이터) |
컬렉션 구현 방법을 노출시키지 않으면서, 그 집한체 안에 들어있는 모든 항목에 접근할 방법을 제공 |
Template Method (템플릿 메서드) |
상위 클래스는 추상 클래스, 하위 클래스는 구체 클래스 |
Observer (옵저버) |
한 객체의 상태가 바뀌면, 그 객체에 의존하는 다른 객체들에 연락가고, 자동 내용 갱신 |
State (스테이트) |
상태에 따라 다르게 처리할 수 있도록, 행위 내용을 변경 |
Visitor (비지터) |
클래스의 메서드가 각 클래스를 돌아다니며, 특정 작업 수행 |
Command (커맨드) |
명령이 들어오면, 그에 맞는 서브 클래스가 선택되어 실행 |
Strategy (스트래티지) |
알고리즘 군 정의, 행위를 클래스로 캡슐화하여 동적으로 행위를 자유롭게 변환 |
Memento (메멘토) |
Undo(작업취소) 기능 개발 시, 사용 |
Chain of Responsibility (체인 오브 리스판서빌리티) |
정적으로 어떤 기능에 대한 처리의 연결이 하드 코딩되어 있을 때, 이를 동적으로 연결되어 있는 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴 |