Hello

[디자인 패턴] - 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)을 분리해서 독립적 확장, 유지보수, 조합 가능성을 높이기 위한 디자인 패턴이다.

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기