| 분류 | 설명 |
|---|---|
| 생성(Creational) | 객체 생성 방식을 캡슐화해서 유연하고 재사용 가능한 객체 생성을 도와줌 |
| 구조(Structural) | 클래스나 객체들을 조합하여 더 큰 구조를 만들 때 사용 |
| 행위(Behavioral) | 객체들 간의 상호작용, 책임 분산 및 알고리즘 캡슐화에 초점 |
| 패턴 | 설명 | 예시 상황 |
|---|---|---|
| Singleton | 인스턴스를 하나만 생성 | DB 커넥션 풀, 설정 객체 |
| Factory Method | 객체 생성을 서브클래스에게 위임 | 다양한 유형의 메세지 객체 생성 |
| Abstract Factory | 관련 객체들을 생성하는 인터페이스 제공 | GUI 툴킷에서 버튼/텍스트박스 일괄 생성 |
| Builder | 복잡한 객체의 생성 과정을 단계별로 분리 | JSON/XML 변환기, 문자열 조합 |
| Prototype | 객체를 복사(clone)해서 생성 | 게임 캐릭터 복제, 템플릿 문서 생성 |
| 패턴 | 설명 | 예시 상황 |
|---|---|---|
| Adapter | 인터페이스를 변환해 호환성 확보 | 구버전 API <-> 새 클래스 호환 |
| Bridge | 구현과 추상을 분리하여 독립 확장 가능 | 리모콘 <-> TV 제어 구조 |
| Composite | 트리 구조로 구성요소를 통일 처리 | 폴더/파일 트리, GUI 컴포넌트 |
| Decorator | 기존 객체에 기능을 동적으로 추가 | 커피 -> 우유 추가 -> 시럽 추가 |
| Facade | 복잡한 서브시스템을 단순 인터페잇로 제공 | Spring의 @Transactional |
| Flyweight | 공통 상태를 공유해 메모리 절약 | 문자 렌더링, 체스말 |
| Proxy | 실제 객체 대신 접근 제어용 객체 사용 | 로깅, 캐시, 원격 프록시 |
| 패턴 | 설명 | 예시 상황 |
|---|---|---|
| Observer | 상태 변화 -> 관련 객체 자동 통보 | 이벤트 리스너, 게시판 알림 |
| Strategy | 알고리즘을 런타임에 바꿀 수 있게 | 정렬 방식 변경 (버블/퀵/병합) |
| Command | 요청을 객체로 캡슐화 | 리모컨 버튼 -> 실행 취소 |
| State | 상태에 따라 행동 변경 | 자판기 상태 (대기/선택/결제 등) |
| Template Method | 알고리즘 틀은 고정, 일부만 오버라이딩 | 웹 요청 처리 흐름 |
| Iterator | 컬렉션 순회 방식 분리 | Iterator or forEach |
| Chain of Responsibility | 처리 객체들을 연결 -> 순서대로 처리 | 필터 체인, 예외처리 체인 |
| Mediator | 객체 간 복잡한 통신을 중재자로 위임 | 채팅방의 중앙 서버 역할 |
| Memento | 객체의 상태 저장/복원 | Undo 기능, 게임 저장 |
| Interpreter | 언어 해석기 구현 | 수식 계산기, 정규식 파서 |
| Visitor | 요소마다 다른 연산 수행 (방문자 객체로) | 문서 구조 순회하여 다른 처리 |