[디자인 패턴] - Bridge
by 볼빵빵오춘기Bridge 패턴
기능 계층과 구현 계층을 분리(Decouple) 해서 서로 독립적으로 확장할 수 있도록 하는 디자인 패턴이다.
즉, 추상적인 기능과 실제 구현을 분리해서, 두 계층이 독립적으로 변경될 수 있도록 만든 구조이다.
예시 코드
// 구현부 계층 (Implementor)
interface Device {
void turnOn();
void turnOff();
}
// 구체적인 구현체
class TV implements Device {
public void turnOn() {
System.out.println("TV 켬");
}
public void turnOff() {
System.out.println("TV 끔");
}
}
class Radio implements Device {
public void turnOn() {
System.out.println("라디오 켬");
}
public void turnOff() {
System.out.println("라디오 끔");
}
}
// 추상 계층 (Abstraction)
abstract class RemoteControl {
protected Device device;
public RemoteControl(Device device) {
this.device = device;
}
public abstract void togglePower();
}
// 확장된 추상화
class BasicRemote extends RemoteControl {
private boolean isOn = false;
public BasicRemote(Device device) {
super(device);
}
public void togglePower() {
if (isOn) {
device.turnOff();
} else {
device.turnOn();
}
isOn = !isOn;
}
}
// 사용 예제
public class BridgeExample {
public static void main(String[] args) {
Device tv = new TV();
RemoteControl remote = new BasicRemote(tv);
remote.togglePower(); // TV 켬
remote.togglePower(); // TV 끔
Device radio = new Radio();
RemoteControl remote2 = new BasicRemote(radio);
remote2.togglePower(); // 라디오 켬
}
}
Bridge 패턴의 장점
계층 분리
추상(기능)과 구현(기기 등)을 분리함으로써 서로 독립적인 개발/확장이 가능하다.
유지보수 쉬움
한 쪽 변경 시 다른 쪽에 영향을 덜 준다.
조합 다양성
새로운 기능이나 새로운 구현체를 추가하기 쉽다.(조합으로 가능)
코드 중복 줄임
기능/구현을 따로 다루므로 코드 재사용성 높다.
Bridge 패턴의 단점
복잡도 증가
구조가 분리되므로 클래스 수가 증가하고 설계가 복잡해진다.
설계 이해 필요
초보자에게는 개념이 다소 어렵게 느껴질 수 있다.
Bridge 패턴은 언제 사용하나?
- 기능 계층과 구현 계층을 독립적으로 변경/확장해야 할 때
ex) 리모컨 → 다양한 기기(TV, 라디오), 다양한 동작 - 다형적인 구현을 지원하면서도 인터페이스를 고정하고 싶을 때
ex) 추상은 유지하면서 내부 구현은 계속 바꿔야 할 때 - 여러 조합이 필요한 클래스 구조가 있을 때
ex) 추상 클래스 × 구현 클래스 = 다형적인 조합이 필요한 경우 - 코드 재사용성과 확장성이 중요한 대규모 시스템
ex) GUI 프레임워크, 멀티플랫폼 UI 구성
정리하자면
Bridge 패턴은 기능(Abstraction)과 구현(Implementor)을 분리해서 독립적 확장, 유지보수, 조합 가능성을 높이기 위한 디자인 패턴이다.
'👩🏻💻 About 프로그래밍 > Spring, Spring boot' 카테고리의 다른 글
[디자인 패턴] - Decorator (0) | 2025.04.07 |
---|---|
[디자인 패턴] - Composite (0) | 2025.04.07 |
[디자인 패턴] - Adapter (0) | 2025.04.07 |
[디자인 패턴] - Singleton (0) | 2025.03.25 |
[디자인 패턴] - Prototype (0) | 2025.03.25 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기