어댑터 패턴
- 목적
- 호환되지 않는 인터페이스를 가진 기존 클래스를, 클라이언트가 기대하는 인터페이스에 맞게 변환한다.
- 특징
- 기존 클래스의 인터페이스를 클라이언트가 기대하는 인터페이스로 변환하여 호환성을 제공한다.
- 이때 클라이언트가 이미 사용 중인 기존 인터페이스를 유지하는 것을 목표로 한다.
- 재귀적 합성을 지원하지 않는다.
- 어댑터는 보통 서로 다른 인터페이스 하나를 다른 인터페이스 하나로 바꾸는 역할이기 때문이다.
- 일반적으로 하나의 객체만 래핑 하여 동작한다.
- 기존 클래스의 인터페이스를 클라이언트가 기대하는 인터페이스로 변환하여 호환성을 제공한다.
데코레이터 패턴
- 목적
- 객체의 기능을 동적으로 확장하기 위해 사용한다.
- 특징
- 향상된 인터페이스를 래핑된 객체에 제공한다.
- 기존 객체의 인터페이스는 변경하지 않는다.
- 클라이언트는 원래 객체와 동일한 방식으로 데코레이터를 사용할 수 있다.
- 행동(기능)을 확장하면서도, 기초 인터페이스와의 일관성을 유지한다.
- 래핑 된 객체에 새로운 책임(기능)을 부여한다.
- 재귀적 합성을 지원한다.
- 데코레이터는 또 다른 데코레이터를 감쌀 수 있어, 여러 기능을 조합하여 확장할 수 있다.
- 합성의 흐름은 클라이언트가 제어한다.
- 어떤 데코레이터를 어떤 순서로 적용할지는 클라이언트가 결정한다.
- 상속보다 유연한 기능 확장을 제공한다.
- 런타임 중에 객체에 기능을 추가할 수 있으므로, 정적인 상속 구조보다 더 유연하다.
- 향상된 인터페이스를 래핑된 객체에 제공한다.
퍼사드 패턴
- 목적
- 복잡한 서브시스템에 대해 단순한 인터페이스를 제공하여 사용을 쉽게 만든다.
- 클라이언트가 서브시스템의 내부 구조나 복잡성을 알 필요 없이 사용할 수 있도록 한다.
- 특징
- 서브시스템을 감싸는 새로운 인터페이스를 정의하여, 클라이언트와 서브시스템 사이의 결합도를 낮춘다.
- 복잡한 시스템의 초기화, 사용 절차를 단순화하고 일괄 제어할 수 있게 해 준다.
- 서브시스템의 세부 구현을 클라이언트로부터 숨긴다.
- 여러 개의 클래스 또는 객체들로 구성된 서브시스템에 대해, 일관된 하나의 진입점(Facade 클래스)을 제공한다.
프록시 패턴
- 목적
- 접근 제어 또는 기능 대리를 통해, 실제 객체에 대한 간접적인 접근을 가능하게 한다.
- 특징
- 실제 객체와 동일한 인터페이스를 구현하여, 클라이언트는 프록시를 실제 객체처럼 사용할 수 있다.
- 서비스 객체(실제 객체)의 수명주기를 프록시가 관리할 수 있다.
- 접근을 제어하거나 추가적인 기능(로깅, 인증 등)을 삽입할 수 있다.
- 실제 객체를 감싸서 사용 전/후로 부가적인 로직을 실행할 수 있다.
컴포지트 패턴
- 목적
- 객체들을 트리 구조로 구성하여 전체-부분 관계를 표현한다.
- 특징
- 복합 객체는 자식 객체들의 결과를 ‘요약’하는 역할만 수행한다.
- 클라이언트가 개별 객체(Leaf)와 복합 객체(Composite)를 동일하게 다룰 수 있도록 만든다.
- 일관된 인터페이스(Component)를 정의하여, Leaf와 Composite가 동일한 방식으로 다룬다.
- 클라이언트는 객체가 복합인지 단일인지 구분할 필요 없이 동일한 방식으로 접근하고 조작할 수 있다.
'자바' 카테고리의 다른 글
Proxy Pattern 정리 (0) | 2025.04.28 |
---|---|
Composite Pattern 정리 (0) | 2025.04.18 |
Facade Pattern 정리 (0) | 2025.04.17 |
Delegation Pattern 정리 (0) | 2025.04.14 |
Decorator Pattern 정리 (0) | 2025.04.11 |