[코딩&디버깅] 생성(5), 구조(7), 행위(11) 패턴 특징
---
## **생성 패턴 (Creational Patterns)**
객체 생성 관련 문제를 해결하며, 객체 생성 과정을 유연하고 효율적으로 만듭니다.
1. **빌더 (Builder)**
- **특징**: 복잡한 객체를 단계별로 생성하고, 최종적으로 일관된 객체를 생성.
- **사용 사례**: 생성 과정이 복잡한 객체의 생성.
- **예시**: 다양한 속성을 가진 자동차 조립.
2. **프로토타입 (Prototype)**
- **특징**: 기존 객체를 복제하여 새로운 객체 생성.
- **사용 사례**: 객체 생성 비용이 비쌀 때 복제를 통해 성능 향상.
- **예시**: 게임 캐릭터를 복제해 여러 캐릭터 생성.
3. **팩토리 메서드 (Factory Method)**
- **특징**: 객체 생성을 서브클래스에서 정의, 객체 생성의 세부사항을 캡슐화.
- **사용 사례**: 구체적인 클래스를 알 필요 없이 객체 생성.
- **예시**: 다양한 데이터베이스 연결 객체 생성.
4. **앱스트랙 팩토리 (Abstract Factory)**
- **특징**: 관련 객체를 그룹으로 묶어 생성.
- **사용 사례**: 계열화된 객체 생성 (윈도우/맥 UI).
- **예시**: 여러 GUI 테마에서 버튼과 스크롤바 생성.
5. **싱글톤 (Singleton)**
- **특징**: 객체를 하나만 생성, 전역 접근을 제공.
- **사용 사례**: 설정 관리 클래스.
- **예시**: 애플리케이션 설정이나 로깅 클래스.
---
## **구조 패턴 (Structural Patterns)**
클래스와 객체의 관계를 정의하며, 시스템 구조를 최적화합니다.
1. **브리지 (Bridge)**
- **특징**: 구현과 인터페이스를 분리하여 독립적으로 확장 가능.
- **사용 사례**: 플랫폼 간 호환성.
- **예시**: TV와 리모컨의 독립적 설계.
2. **데코레이터 (Decorator)**
- **특징**: 객체에 동적으로 새로운 기능을 추가.
- **사용 사례**: 확장 가능한 기능 추가.
- **예시**: 메시지 암호화 기능 추가.
3. **퍼사드 (Facade)**
- **특징**: 복잡한 서브시스템을 단순한 인터페이스로 제공합니다.
- **사용 사례**: 라이브러리 사용 단순화.
- **예시**: 호텔 예약 시스템의 단일 API.
4. **플라이웨이트 (Flyweight)**
- **특징**: 공유를 통해 메모리 사용을 줄임.
- **사용 사례**: 대량의 유사 객체 생성.
- **예시**: 게임에서 동일한 적 객체 공유.
5. **프록시 (Proxy)**
- **특징**: 다른 객체에 대한 접근을 제어.
- **사용 사례**: 네트워크 요청 최소화.
- **예시**: 가상 프록시로 이미지 로드 지연 처리.
6. **컴포지트 (Composite)**
- **특징**: 객체들을 트리 구조로 구성하여 단일 객체처럼 다룸.
- **사용 사례**: 계층 구조 데이터 처리.
- **예시**: 파일 시스템 구조.
7. **어댑터 (Adapter)**
- **특징**: 인터페이스 변환을 통해 호환성을 제공.
- **사용 사례**: 서로 다른 시스템 간의 연결.
- **예시**: 전압 변환기.
---
## **행위 패턴 (Behavioral Patterns)**
객체 간의 상호작용 및 책임 분배에 중점을 둡니다.
1. **미디에이터 (Mediator)**
- **특징**: 객체 간 통신을 중앙 집중화.
- **사용 사례**: 복잡한 객체 네트워크 조율.
- **예시**: 채팅 애플리케이션의 메시지 라우팅.
2. **인터프리터 (Interpreter)**
- **특징**: 언어의 문법을 정의하고 해석.
- **사용 사례**: DSL(도메인 특화 언어) 처리.
- **예시**: 정규식 해석기.
3. **이터레이터 (Iterator)**
- **특징**: 컬렉션 요소를 순차적으로 접근.
- **사용 사례**: 리스트 반복 작업.
- **예시**: 데이터베이스 레코드 순회.
4. **스테이트 (State)**
- **특징**: 상태에 따라 객체의 동작을 변경.
- **사용 사례**: 상태 기반 전환.
- **예시**: 문서 편집기의 상태(편집/읽기).
5. **비지터 (Visitor)**
- **특징**: 연산을 객체 구조에서 분리.
- **사용 사례**: 복잡한 객체 구조에 동작 추가.
- **예시**: 파일 시스템 탐색.
6. **커맨드 (Command)**
- **특징**: 요청을 객체로 캡슐화.
- **사용 사례**: 실행 취소, 재실행 기능.
- **예시**: 리모컨 버튼 명령.
7. **전략 (Strategy)**
- **특징**: 알고리즘을 캡슐화하여 교환 가능.
- **사용 사례**: 동적으로 알고리즘 선택.
- **예시**: 정렬 알고리즘 선택.
8. **메멘토 (Memento)**
- **특징**: 객체 상태를 저장하고 복원.
- **사용 사례**: 이전 상태 복구.
- **예시**: 문서 복구 기능.
9. **체인 오브 리스폰서빌리티 (Chain of Responsibility)**
- **특징**: 요청을 처리할 기회를 여러 객체에 제공.
- **사용 사례**: 이벤트 처리 체인.
- **예시**: 권한 검증 체인.
---
**요약 및 차이점 구분**
- **생성 패턴**: 객체 생성 및 초기화에 초점. (예: 싱글톤, 빌더)
- **구조 패턴**: 시스템 구조 및 관계를 개선. (예: 데코레이터, 어댑터)
- **행위 패턴**: 객체 간 상호작용 및 책임 분배. (예: 전략, 스테이트)
'낙서장[2] > 코딩&디버깅' 카테고리의 다른 글
[코딩&디버깅] 도커 MYSQL 설치 (0) | 2025.03.03 |
---|---|
[코딩&디버깅] C/Java/Python <-> 도커 <-> VSCode 설치 (0) | 2025.03.02 |
[코딩&디버깅] C언어 환경구성 (VM 우분투22.04 <-> 윈도우 VSCODE) (1) | 2025.02.23 |
[코딩&디버깅] 모의고사01회 6번 (0) | 2025.02.13 |
[JAVA] 나머지 구하기 (2) | 2025.01.22 |