반응형
1. 브릿지 패턴이란?
브릿지 패턴은 구현(Implementation)과 추상화(Abstraction)를 분리하여 각자 독립적으로 확장할 수 있게 해주는 구조 패턴이다. 즉, 추상적인 기능과 그 기능의 실제 구현을 분리하여 변경이 유연하게 이루어질 수 있도록 한다.
특징
- 구현과 추상화의 분리: 서로 독립적으로 확장 가능
- 유지보수 용이: 코드 변경 시 영향 범위가 작아진다
- 클래스 수 감소: 기능 조합이 많아질 경우 클래스 폭증을 방지한다
2. 브릿지 패턴의 구조
- Abstraction(추상화): 클라이언트가 사용하는 인터페이스를 정의하며, 구현체 객체에 위임
- RefinedAbstraction(확장된 추상화): Abstraction의 확장, 구체적인 기능 제공
- Implementor(구현 인터페이스): Abstraction에서 사용하는 인터페이스
- ConcreteImplementor(구현체): Implementor를 구현한 실제 클래스
3. 브릿지 패턴 구현 예제
예제: 다양한 UI 알림 전송 방식 (Email, SMS)
// 구현 인터페이스: 실제 알림 전송 방식을 정의
interface MessageSender {
void send(String message);
}
// 구현체 1: 이메일로 메시지를 전송하는 클래스
class EmailSender implements MessageSender {
public void send(String message) {
System.out.println("[Email] " + message);
}
}
// 구현체 2: SMS로 메시지를 전송하는 클래스
class SmsSender implements MessageSender {
public void send(String message) {
System.out.println("[SMS] " + message);
}
}
// 추상화: Notification은 어떤 방식으로 보낼지 알지 못하고 MessageSender에 위임만 함
abstract class Notification {
protected MessageSender sender; // 구현 객체를 참조
public Notification(MessageSender sender) {
this.sender = sender;
}
public abstract void notify(String message);
}
// 확장된 추상화: 실제 알림을 보내는 구체적인 Notification
class UserNotification extends Notification {
public UserNotification(MessageSender sender) {
super(sender);
}
@Override
public void notify(String message) {
sender.send(message); // 어떤 방식으로 보낼지는 sender가 결정
}
}
// 클라이언트 코드: 구현체와 추상화를 독립적으로 조합할 수 있음
public class BridgeExample {
public static void main(String[] args) {
// 이메일 방식으로 알림 전송
MessageSender email = new EmailSender();
Notification emailNotification = new UserNotification(email);
emailNotification.notify("이메일 알림입니다.");
// SMS 방식으로 알림 전송
MessageSender sms = new SmsSender();
Notification smsNotification = new UserNotification(sms);
smsNotification.notify("SMS 알림입니다.");
}
}
이 구조를 통해, Notification은 메시지를 "어떻게" 보낼지 신경 쓰지 않고, 메시지를 보내는 방법(MessageSender)은 자유롭게 교체하거나 확장할 수 있다.
4. 브릿지 패턴의 장점과 단점
장점
- 구현과 추상을 독립적으로 변경할 수 있다.
- 기능과 구현을 조합하여 새로운 클래스를 유연하게 생성할 수 있다.
- 클래스 수가 많아지는 것을 방지할 수 있다.
단점
- 설계가 복잡해질 수 있다.
- 계층 구조를 분리하여 코드 이해가 처음에는 어려울 수 있다.
5. 활용 사례 (웹 개발 관련)
1) 다양한 메시징 서비스 연동
웹 서비스에서 이메일, 슬랙, SMS 등 다양한 방식으로 알림을 전송할 때, 구현체만 바꾸어 확장 가능하다.
2) 프론트엔드 테마 적용 시스템
UI 구성 요소와 테마 렌더링 방식을 분리하여, 테마 변경 시 UI 구조는 그대로 유지할 수 있다.
3) 결제 수단 확장
결제 로직과 결제 수단(카드, 계좌이체 등)을 분리하여, 수단만 교체하며 확장할 수 있다.
브릿지 패턴은 추상화와 구현을 분리함으로써 유연하고 확장 가능한 구조를 만든다. 특히 다양한 구현체를 지원해야 하는 웹 애플리케이션에서 이 패턴을 사용하면, 기능을 모듈화하고 유지보수를 쉽게 할 수 있다는 큰 장점이 있다.
반응형
'Programming > Design Patterns' 카테고리의 다른 글
GoF 디자인 패턴 - 데코레이터 패턴 (Decorator Pattern) (1) | 2025.05.08 |
---|---|
GoF 디자인 패턴 - 어댑터 패턴 (Adapter Pattern) (1) | 2025.04.18 |
GoF 디자인 패턴 - 프로토타입 패턴 (Prototype Pattern) (0) | 2025.04.10 |
GoF 디자인 패턴 - 빌더 패턴 (Builder Pattern) (0) | 2025.04.09 |
GoF 디자인 패턴 - 추상 팩토리 패턴 (Abstract Factory Pattern) (2) | 2025.04.08 |