디자인 패턴 (Design Patterns) 학습 로드맵
디자인 패턴은 소프트웨어 설계에서 반복적으로 발생하는 문제들에 대해 재사용 가능한 해결책을 제시합니다. 크게 생성, 구조, 행위 세 가지 범주로 나뉩니다.
1. 생성 패턴 (Creational Patterns)
객체 생성 기법에 관여하며, 객체의 생성과 참조 과정을 캡슐화하여 시스템을 유연하게 만듭니다.
- Singleton (싱글톤): 클래스의 인스턴스가 오직 하나만 생성되도록 보장합니다.
- Factory Method (팩토리 메서드): 객체 생성 인터페이스를 정의하되, 실제 생성은 서브클래스에서 결정하도록 합니다.
- Abstract Factory (추상 팩토리): 구체적인 클래스에 의존하지 않고 서로 연관된 객체들의 조합을 만드는 인터페이스를 제공합니다.
- Builder (빌더): 복잡한 객체의 생성 단계와 표현 단계를 분리하여 동일한 생성 과정에서 다양한 결과를 만듭니다.
- Prototype (프로토타입): 기존 객체를 복사하여 새로운 객체를 생성합니다.
2. 구조 패턴 (Structural Patterns)
클래스나 객체를 조합하여 더 큰 구조를 만드는 패턴입니다.
- Adapter (어댑터): 호환되지 않는 인터페이스를 가진 클래스들이 함께 작동할 수 있도록 연결합니다.
- Bridge (브릿지): 구현부에서 추상층을 분리하여 각자 독립적으로 확장할 수 있게 합니다.
- Composite (컴포지트): 객체들의 관계를 트리 구조로 구성하여 단일 객체와 복합 객체를 동일하게 다룹니다.
- Decorator (데코레이터): 객체에 동적으로 새로운 책임(기능)을 추가합니다.
- Facade (퍼사드): 서브시스템의 일련의 인터페이스들에 대해 통합된 인터페이스를 제공합니다.
- Flyweight (플라이웨이트): 대량의 작은 객체들을 공유하여 메모리 사용량을 줄입니다.
- Proxy (프록시): 다른 객체에 대한 접근을 제어하기 위한 대리자 역할을 합니다.
3. 행위 패턴 (Behavioral Patterns)
객체나 클래스 사이의 알고리즘이나 책임 분담에 관련된 패턴입니다.
- Chain of Responsibility (책임 연쇄): 요청을 받는 객체를 연쇄적으로 묶어 요청을 처리할 때까지 전달합니다.
- Command (커맨드): 요청을 객체 형태로 캡슐화하여 매개변수화하거나 로그를 남길 수 있게 합니다.
- Interpreter (인터프리터): 특정 언어의 문법을 정의하고 해석하는 방법을 제공합니다.
- Iterator (반복자): 내부 표현 방식을 노출하지 않고 컬렉션의 요소들에 순차적으로 접근합니다.
- Mediator (중재자): 객체 간의 복잡한 상호작용을 중재자 객체에 캡슐화하여 결합도를 낮춥니다.
- Memento (메멘토): 객체의 상태를 저장하여 나중에 해당 상태로 복구할 수 있게 합니다.
- Observer (옵저버): 객체의 상태 변화를 관찰하는 관찰자들에게 통지하는 구조를 만듭니다.
- State (상태): 객체의 상태에 따라 객체의 행위가 변경되도록 합니다.
- Strategy (전략): 동일 계열의 알고리즘들을 정의하고 캡슐화하여 실행 중에 선택할 수 있게 합니다.
- Template Method (템플릿 메서드): 알고리즘의 골격을 정의하고 일부 단계를 서브클래스에서 구현하도록 합니다.
- Visitor (방문자): 데이터 구조와 연산을 분리하여 구조를 변경하지 않고 새로운 연산을 추가합니다.
학습 가이드 요약
| 구분 | 초점 | 핵심 키워드 |
|---|---|---|
| 생성(Creational) | 객체 생성 방식 | 효율적인 인스턴스화, 캡슐화 |
| 구조(Structural) | 클래스/객체 결합 | 인터페이스 호환, 구조적 확장 |
| 행위(Behavioral) | 객체 간 상호작용 | 책임 분산, 알고리즘 유연성 |