객체 생성 과정에서의 복잡성을 줄이고, 객체 생성 메커니즘을 유연하게 만드는 데 초점이 맞춰져 있습니다.
- 주요 패턴
- Singleton
∘ 특정 클래스의 인스턴스가 오직 하나만 존재하도록 보장합니다.
∘ 사용 사례 : DB 연결, 설정 관리, 로깅- Factory Method
∘ 객체 생성 코드를 클라이언트에서 분리하여 구체적인 클래스 이름 없이 객체를 생성할 수 있도록 합니다.
∘ 사용 사례 : 객체 타입이 동적으로 결정되는 경우- Abstract Factory
∘ 관련된 객체들을 그룹으로 생성해야 할 때 사용됩니다.
∘ 사용 사례 : 서로 다른 플랫폼(Windows, macOS)용 GUI 생성- Builder
∘ 객체의 생성 과정을 단계적으로 처리하여, 복잡한 객체를 간단히 생성할 수 있도록 합니다.
∘ 사용 사례 : 복잡한 초기화가 필요한 객체(ex: JSON 파서)- Prototype
∘ 기존 객체를 복사하여 새로운 객체를 생성합니다.
∘ 사용 사례 : 객체 생성 비용이 높은 경우(ex: 대규모 데이터베이스 객체 복제)
클래스와 객체를 효율적으로 조합하여 더 큰 구조를 만드는 데 사용됩니다.
- 주요 패턴
- Adapter
∘ 호환되지 않는 인터페이스를 서로 연결해주는 역할
∘ 사용 사례 : 기존 코드와 새로운 코드 통합- Bridge
∘ 구현과 인터페이스를 분리하여 독립적으로 확장 가능하도록 합니다.
∘ 사용 사례 : 서로 다른 OS에서 동일한 기능을 구현할 때- Composite
∘ 객체를 트리 구조로 만들어, 개별 객체와 그룹 객체를 동일하게 다를 수 있도록 합니다.
∘ 사용 사례 : 파일 시스템(디렉토리와 파일)- Decorator
∘ 기존 객체에 기능을 동적으로 추가합니다.
∘ 사용 사례 : I/O 시스템 처리(Java의 BufferedReader)- Facade
∘ 복잡한 서브시스템을 단순화하기 위해 고수준 인터페이스를 제공합니다.
∘ 사용 사례 : 복잡한 API 라이브러리를 단순화- Flyweight
∘ 다수의 객체를 공유해 메모리를 절약합니다.
∘ 사용 사례 : 대량의 문자열 저장(문자열 풀)- Proxy
∘ 다른 객체에 대한 접근을 제어합니다.
∘ 사용 사례 : 원격 객체, 지원 로딩, 접근 제어
객체 간의 책임 할당과 커뮤니케이션에 초점을 둡니다.
- 주요 패턴
- Chain of Responsibility
∘ 요청을 처리할 수 있는 여러 객체를 체인으로 묶어 요청을 순차적으로 전달
∘ 사용 사례 : 이벤트 핸들링 시스템- Command
∘ 요청을 객체로 캡슐화하여 실행, 취소 드의 작업을 추적 기능
∘ 사용 사례 : 실행 취소(Undo), 작업 큐- Interpreter
∘ 언어의 문법을 정의하고 해석합니다.
∘ 사용 사례 : SQL 쿼리 파서, 정규식 엔진- Iterator
∘ 컬렉션의 요소를 순차적으로 접근하는 방법을 제공합니다.
∘ 사용 사례 : Java의 Iterator- Mediator
∘ 객체 간의 상호작용을 중재하여 결합도를 낮춥니다.
∘ 사용 사례 : 채팅 시스템에서 사용자 간 메시지 전달- Memento
∘ 객체 상태를 캡슐화하여 나중에 복원 가능
∘ 사용 사례 : 게임 상태 저장/복원- Observer
∘ 객체 상태 변화 시, 의존 객체들에게 자동으로 알림
∘ 사용 사례 : 이벤트 리스너, GUL- State
∘ 객체 상태에 따라 다른 행동을 수행
∘ 사용 사례 : 문 상태(열림/닫힘)- Strategy
∘ 알고리즘을 캡슐화하여 런타임에 교체 가능
∘ 사용 사례 : 정렬 알고리즘 변경- Template Method
∘ 알고리즘의 구조를 정의하고, 세부 구현은 서브클래스에 위임
∘ 사용 사례 : 데이터 처리 파이프라인- Visitor
∘ 객체 구조를 순회하며 새로운 기능을 추가
∘ 사용 사례 : 복잡한 객체 그래프 탐색