-
구조 패턴- 브릿지(Bridge) 패턴Java/디자인패턴 2024. 11. 11. 09:17반응형
브릿지(Bridge) 패턴은 구조 패턴(Structural Pattern) 중 하나로, 구현부와 추상화된 인터페이스를 분리하여 서로 독립적으로 확장할 수 있도록 설계하는 패턴입니다. 이는 하나의 인터페이스에 다양한 구현을 적용할 수 있게 하여 코드의 유연성을 높이는 데 목적이 있습니다. 즉, 두 부분을 연결하는 ‘다리’를 놓아 서로 독립적인 수정과 확장을 가능하게 합니다.
1. 브릿지 패턴의 목적
브릿지 패턴은 코드의 결합도를 낮추고, 기능과 구현을 독립적으로 확장할 수 있도록 도와줍니다. 특히, 클래스 계층이 복잡해지거나 다양한 기능의 조합이 필요할 때 유용합니다.
2. 브릿지 패턴의 구성 요소
- 추상화(Abstraction): 클라이언트가 사용하는 최상위 인터페이스나 추상 클래스입니다. 이 클래스는 구현부(Implementor)와의 연계를 통해 기능을 정의하고, 구체적인 작업은 구현부에 위임합니다.
- 확장된 추상화(RefinedAbstraction): 추상화의 구체적인 서브클래스로, 추가된 기능을 제공할 수 있습니다.
- 구현부(Implementor): 추상화가 기대하는 인터페이스를 정의하는 부분으로, 실제 작업을 수행하는 역할을 합니다.
- 구체적인 구현부(ConcreteImplementor): 구현부의 구체적인 서브클래스로, 특정한 방법으로 작업을 수행합니다.
3. 브릿지 패턴의 예제 (Java)
예를 들어, 기기(Device)와 플랫폼(Platform)의 두 개념이 있다고 가정해봅시다. 기기에는 TV와 Radio가 있고, 플랫폼은 Google과 Apple이 있습니다. 브릿지 패턴을 통해 다양한 기기가 다양한 플랫폼을 선택적으로 사용할 수 있도록 합니다.
코드 예제
// Implementor 인터페이스: Platform interface Platform { void play(); void stop(); } // ConcreteImplementor 클래스: GooglePlatform class GooglePlatform implements Platform { @Override public void play() { System.out.println("구글 플랫폼에서 재생"); } @Override public void stop() { System.out.println("구글 플랫폼에서 정지"); } } // ConcreteImplementor 클래스: ApplePlatform class ApplePlatform implements Platform { @Override public void play() { System.out.println("애플 플랫폼에서 재생"); } @Override public void stop() { System.out.println("애플 플랫폼에서 정지"); } } // Abstraction 클래스: Device abstract class Device { protected Platform platform; protected Device(Platform platform) { this.platform = platform; } abstract void turnOn(); abstract void turnOff(); } // RefinedAbstraction 클래스: TV class TV extends Device { public TV(Platform platform) { super(platform); } @Override void turnOn() { System.out.print("TV 켜기: "); platform.play(); } @Override void turnOff() { System.out.print("TV 끄기: "); platform.stop(); } } // RefinedAbstraction 클래스: Radio class Radio extends Device { public Radio(Platform platform) { super(platform); } @Override void turnOn() { System.out.print("라디오 켜기: "); platform.play(); } @Override void turnOff() { System.out.print("라디오 끄기: "); platform.stop(); } } // 클라이언트 코드 public class BridgePatternExample { public static void main(String[] args) { Device tvWithGoogle = new TV(new GooglePlatform()); Device radioWithApple = new Radio(new ApplePlatform()); tvWithGoogle.turnOn(); // TV 켜기: 구글 플랫폼에서 재생 tvWithGoogle.turnOff(); // TV 끄기: 구글 플랫폼에서 정지 radioWithApple.turnOn(); // 라디오 켜기: 애플 플랫폼에서 재생 radioWithApple.turnOff(); // 라디오 끄기: 애플 플랫폼에서 정지 } }
코드 설명
- Platform 인터페이스는 구현부의 역할을 하며, GooglePlatform과 ApplePlatform은 이 인터페이스를 구현하여 각각의 플랫폼 기능을 제공합니다.
- Device 추상 클래스는 추상화의 역할을 하며, platform 객체를 통해 Platform 기능을 사용합니다.
- TV와 Radio 클래스는 Device의 확장된 추상화로, 각각 turnOn()과 turnOff() 메서드를 통해 기기를 켜고 끄는 구체적인 작업을 수행합니다.
- 클라이언트 코드에서는 TV와 Radio 객체에 특정 플랫폼을 결합하여 사용합니다.
4. 브릿지 패턴의 장점과 단점
장점
- 추상화와 구현부가 독립적으로 확장 가능하므로 유연성이 높아집니다.
- 코드의 결합도를 낮추어 변경에 강한 구조를 만들 수 있습니다.
단점
- 코드가 복잡해질 수 있으며, 추상화와 구현부가 분리되어 관리해야 할 클래스가 많아질 수 있습니다.
5. 브릿지 패턴의 사용 예시
브릿지 패턴은 기기와 플랫폼 같은 독립적인 구조를 가진 경우, 다양한 UI와 DB 연결 구조처럼 두 개념이 독립적으로 변할 수 있는 경우에 유용하게 사용됩니다.
반응형'Java > 디자인패턴' 카테고리의 다른 글
구조패턴 - 프록시(Proxy) 패턴 (0) 2024.11.13 생성패턴 - 팩토리 메소드(Factory Method) 패턴 (0) 2024.11.12 구조 패턴 - 어댑터(Adapter) 패턴 (0) 2024.11.10 행위 패턴 - 상태 패턴 (State Pattern) (0) 2024.11.09 생성 패턴 - Singleton 패턴 (0) 2024.11.08