브릿지 Bridge
🙊

브릿지 Bridge

Created
Apr 23, 2024 03:43 AM
Last edited time
Last updated April 23, 2024
Tags
CS
Language
URL

Intro::

디자인 패턴 중 구조 패턴인 브릿지에 대해 알아봅시다.
 

브릿지 패턴이란?

💡
브릿지 패턴은 객체 지향 프로그래밍에서 사용하는 디자인 패턴 중 하나입니다. 이 패턴의 주요 목적은 구현에서 추상을 분리하여, 둘을 독립적으로 변형하고 확장할 수 있도록 하는 것입니다. 즉, 추상화된 부분과 구현된 부분을 분리해서 각각을 독립적으로 관리할 수 있게 해줍니다.
 

구성 요소

  1. 추상화(Abstraction): 클라이언트에서 사용하는 추상적인 인터페이스를 정의합니다. 이 인터페이스는 구현 부분에 해당하는 인터페이스를 참조하며, 이 인터페이스를 통해 구현 클래스에 접근합니다.
  1. 구체적인 추상화(Refined Abstraction): 추상화 클래스를 상속 받아 좀 더 구체화된 기능을 제공합니다.
  1. 구현자(Implementor): 구현 부분의 인터페이스를 정의하며, 이는 추상화를 통해 접근되는 메서드를 포함합니다.
  1. 구체적 구현자(Concrete Implementor): 구현자 인터페이스를 실제로 구현하는 클래스로, 추상화를 통해 정의된 메서드의 실제 동작을 구현합니다.

장점

  • 확장성: 추상화와 구현을 분리함으로써, 두 부분을 독립적으로 확장하거나 수정할 수 있습니다. 이는 두 모듈이 서로의 내부 구현에 영향을 미치지 않으면서도 발전할 수 있도록 합니다.
  • 유연성: 새로운 기능이나 객체의 변형이 필요할 때 기존 코드를 많이 변경하지 않고도 새로운 클래스를 추가하기만 하면 됩니다.
  • 결합도 감소: 높은 수준의 결합도는 소프트웨어 구조를 복잡하게 만드는 주요 원인 중 하나입니다. 브릿지 패턴은 이를 낮춰 유지 보수와 재사용이 용이하게 합니다.
 

단점

  • 복잡성 증가: 디자인 패턴을 적용함으로써 초기 코드 설계가 더 복잡해지고, 이해하기 어려워질 수 있습니다. 따라서, 시스템의 설계가 정말로 유연성을 요구하거나, 서로 다른 방식으로 변형될 가능성이 있는 경우에 주로 사용하는 것이 좋습니다.
 

코드 예시

구현자(Implementor) 인터페이스:
interface DriveMode { void performDrive(); }
구체적 구현자(Concrete Implementor) 클래스들:
class EconomyMode implements DriveMode { public void performDrive() { System.out.println("Driving in economy mode."); } } class SportMode implements DriveMode { public void performDrive() { System.out.println("Driving in sport mode."); } }
추상화(Abstraction) 클래스:
abstract class Car { protected DriveMode driveMode; public Car(DriveMode driveMode) { this.driveMode = driveMode; } abstract void drive(); }
구체적인 추상화(Refined Abstraction) 클래스들:
class Sedan extends Car { public Sedan(DriveMode driveMode) { super(driveMode); } public void drive() { System.out.print("Sedan "); driveMode.performDrive(); } } class SUV extends Car { public SUV(DriveMode driveMode) { super(driveMode); } public void drive() { System.out.print("SUV "); driveMode.performDrive(); } }
메인 클래스에서 사용:
public class Main { public static void main(String[] args) { DriveMode economy = new EconomyMode(); DriveMode sport = new SportMode(); Car sedan = new Sedan(economy); Car suv = new SUV(sport); sedan.drive(); // 출력: Sedan Driving in economy mode. suv.drive(); // 출력: SUV Driving in sport mode. } }
 

References::

Loading Comments...