[코딩&디버깅] 생성(5), 구조(7), 행위(11) 패턴 특징

Posted by nkjok
2025. 3. 24. 22:10 낙서장[2]/코딩&디버깅
반응형

---

## **생성 패턴 (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)**  
   - **특징**: 요청을 처리할 기회를 여러 객체에 제공.
   - **사용 사례**: 이벤트 처리 체인.
   - **예시**: 권한 검증 체인.

---

**요약 및 차이점 구분**  
- **생성 패턴**: 객체 생성 및 초기화에 초점. (예: 싱글톤, 빌더)
- **구조 패턴**: 시스템 구조 및 관계를 개선. (예: 데코레이터, 어댑터)
- **행위 패턴**: 객체 간 상호작용 및 책임 분배. (예: 전략, 스테이트)

반응형