2024년 1월 12일
구조 패턴 (Structural Pattern)
1. 인터페이스 호환성 제공, Adapter 패턴
(1) Adapter 패턴의 개념 및 사용 목적
개념 | 사용 목적 |
---|---|
호환되지 않은 인터페이스를 가진 객체 간 클래스 상속과 인스턴스 위임을 통해 인터페이스 호환성을 제공하는 구조적 디자인 패턴 | – 서로 다른 인터페이스 간 호환성 제공 – 프로그램 신/구버전 공존 가능성 제공 |
(2) Adapter 패턴의 클래스 다이어그램
상속 | |
위임 |
(3) Adapter 패턴의 구성요소
구성요소 | 역할 |
---|---|
Target | 수행 시 필요한 메소드를 결정 |
Client | Target의 메소드를 사용 |
Adaptee | 적응 대상으로 이미 준비된 메소드를 가짐 |
Adapter | Adaptee의 메소드를 사용하여 Target을 만족시키는 것이 목적 |
2. 기능 계층과 구현 계층 분리, Bridge 패턴
(1) Bridge 패턴의 개념 및 사용 목적
개념 | 사용 목적 |
---|---|
객체의 확장성과 다양성을 확보하기 위해 객체에서 기능 부분과 구현 부분을 분리하여 연결해주는 구조적 디자인 패턴 | – 기능/구현의 클래스를 분리 – 기능/구현 클래스 간 연결 |
(2) Bridge 패턴의 클래스 다이어그램
(3) Bridge 패턴의 구성요소
구성요소 | 역할 |
---|---|
Abstraction | 기능의 클래스 계층의 최상위 클래스로 Implementor의 메소드를 사용하여 기본 기능만 기술 |
RefinedAbstraction | Abstraction에 기능을 추가 |
Implementor | 구현의 클래스 계층의 최상위 클래스로 Abstraction의 인터페이스를 구현하기 위한 메소드를 규정 |
ConcreteImplementor | 구체적으로 Implementor의 인터페이스를 구현 |
3. 단일/복합 객체 동일 취급, Composite 패턴
(1) Composite 패턴의 개념 및 사용 목적
개념 | 사용 목적 |
---|---|
단일/복합 객체를 동일하게 취급하기 위해 객체들 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 구조적 디자인 패턴 | – 단일/복합 객체를 동일하게 취급 – 부분과 전체 계층을 재귀적으로 표현 |
(2) Composite 패턴의 클래스 다이어그램
(3) Composite 패턴의 구성요소
구성요소 | 역할 |
---|---|
Leaf | Component 인터페이스를 구현 |
Composite | Leaf나 Composite를 보유 |
Component | Leaf와 Composite를 동일하게 취급하고 공통 상위 클래스로 구현 |
4. 코드 변경 없이 기능 추가, Decorator 패턴
(1) Decorator 패턴의 개념 및 사용 목적
개념 | 사용 목적 |
---|---|
기존 코드를 변경하지 않고 부가 기능을 동적으로 유연하게 추가하기 위해 특수 래퍼(wrapper) 객체 안에 객체를 배치하는 구조적 디자인 패턴 | – 객체에 추가 요건을 기능을 동적으로 추가 – 기존 코드 변경 없이 다양한 기능 추가 |
(2) Decorator 패턴의 클래스 다이어그램
(3) Decorator 패턴의 구성요소
구성요소 | 역할 |
---|---|
Component | ConcreteComponent와 Decorator가 구현할 인터페이스로, 두 객체를 동등하게 취급 |
ConcreteComponent | Decorate(기능 추가) 대상 객체 |
Decorator | Decorate 할 객체의 추상 클래스로, 기능 추가 대상 객체는 이 객체를 상속 |
ConcreteDecorator | Decorate를 상속받아 구현할 기능 객체 |
5. 단순한 인터페이스 제공, Façade 패턴
(1) Façade 패턴의 개념 및 사용 목적
개념 | 사용 목적 |
---|---|
복잡한 코드를 단순한 인터페이스로 제공하기 위해 공통 기능을 정의하는 단순화된 상위 수준의 인터페이스를 정의하는 구조적 디자인 패턴 | – 복잡한 내용을 상위 수준의 API로 제공 – 시스템 외부에 간단한 인터페이스 제공 – 클래스 역할을 고려하여 올바른 순서 사용 |
(2) Façade 패턴의 클래스 다이어그램
(3) Façade 패턴의 구성요소
구성요소 | 역할 |
---|---|
Facade | 시스템을 구성하는 클래스의 창구 역할로, 상위 수준의 단순한 인터페이스를 시스템 외부에 제공 |
여러 Class | 각 Class 별 기능을 제공하며, Facade에서 호출되어 수행 |
6. 기존 객체 공유로 가벼운 시스템 유지, Flyweight 패턴
(1) Flyweight 패턴의 개념 및 사용 목적
개념 | 사용 목적 |
---|---|
메모리 사용 효율화를 위해 재사용 가능한 객체 인스턴스를 공유(캐싱)하여 new 연산자 사용을 최소화하는 구조적 디자인 패턴 | – 인스턴스 최대한 공유, new 최소화 – 메모리 사용 효율화로 성능 향상 |
(2) Flyweight 패턴의 클래스 다이어그램
(3) Flyweight 패턴의 구성요소
구성요소 | 역할 |
---|---|
Flyweight | Flyweight 공통 메소드를 정의하고 Factory에 제공 |
FlyweightFactory | 해당 클래스를 사용하여 Flyweight의 인스턴스를 생성 또는 공유(캐싱) |
ConcreteFlyweight | Flyweight의 구체적인 기능을 구현하고 실제 사용되는 객체 |
7. 원본 객체 대신 처리, Proxy 패턴
(1) Proxy 패턴의 개념 및 사용 목적
개념 | 사용 목적 |
---|---|
객체의 접근제어 및 보안성 향상을 위해 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 구조적 디자인 패턴 | – 객체의 유효성 검사, 보안성 향상 – 가상 프록시, 원격 프록시, 보호 프록시 |
(2) Proxy 패턴의 클래스 다이어그램
(3) Proxy 패턴의 구성요소
구성요소 | 역할 |
---|---|
Subject | Proxy와 RealSubject를 동일시하기 위한 인터페이스 정의 |
Proxy | 대상 객체인 RealSubject를 대신하여 사용자 요청 처리 |
RealSubject | 실제 서비스하는 주 객체로 원본 대상 객체 |
[참고]
- 영진닷컴, JAVA 언어로 배우는 디자인 패턴 입문: 쉽게 배우는 GoF의 23가지 디자인 패턴