ComputerScience/디자인 패턴

[디자인 패턴] 브릿지 패턴

slown 2024. 6. 3. 19:25

목차

1.브릿지 패턴?

2.브릿지 패턴의 장단점

3.브릿지 패턴 구현

 

1.브릿지 패턴?

브리지 패턴(Bridge Pattern)은 객체 지향 디자인 패턴 중 하나로, 구현(Implementation)과 추상화(Abstraction)를 분리하여 서로 독립적으로 변경할 수 있도록 하는 패턴입니다. 이 패턴의 주된 목적은 추상화와 구현을 분리하여 독립적으로 확장할 수 있도록 하는 것입니다. 이로써 코드를 더 유연하고 확장 가능하게 만들며, 변경에 대한 영향을 최소화할 수 있습니다.

2.브릿지 패턴의 장단점

브릿지 패턴의 장단점은 다음과 같습니다.

장점

  • 독립적인 확장성: 추상화와 구현이 독립적으로 확장될 수 있습니다.
  • 변경 용이성: 구현체가 변경되더라도 추상화에 영향을 주지 않으므로 변경이 용이합니다.
  • 유연성: 런타임 시에 구현체를 동적으로 변경할 수 있습니다.

단점

  • 복잡성 증가: 계층이 증가하면서 코드가 복잡해질 수 있습니다.
  • 초기 설계 부담: 패턴을 적용하기 위해 초기 설계 시점에서 구조를 잘 정의해야 합니다.

3.브릿지 패턴 구현

// Implementor
interface Color {
    void applyColor();
}

// Concrete Implementors
class Red implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying red color");
    }
}

class Blue implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying blue color");
    }
}

// Abstraction
abstract class Shape {
    protected Color color;

    public Shape(Color color) {
        this.color = color;
    }

    abstract void draw();
}

// Refined Abstractions
class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    void draw() {
        System.out.println("Drawing Circle");
        color.applyColor();
    }
}

class Square extends Shape {
    public Square(Color color) {
        super(color);
    }

    @Override
    void draw() {
        System.out.println("Drawing Square");
        color.applyColor();
    }
}

// Client code
public class BridgePatternDemo {
    public static void main(String[] args) {
        Color red = new Red();
        Color blue = new Blue();

        Shape circle = new Circle(red);
        Shape square = new Square(blue);

        circle.draw();  // Output: Drawing Circle, Applying red color
        square.draw();  // Output: Drawing Square, Applying blue color
    }
}

 

그현된 코드를 설명하면 다음과 같다.

  1. Color 인터페이스 (Implementor):
    • Color 인터페이스는 applyColor 메서드를 정의합니다. 이 메서드는 색상을 적용하는 역할을 합니다.
  2. Red와 Blue 클래스 (Concrete Implementors):
    • Red와 Blue 클래스는 Color 인터페이스를 구현하며, 각각 빨간색과 파란색을 적용하는 메서드를 구현합니다.
  3. Shape 추상 클래스 (Abstraction):
    • Shape 추상 클래스는 Color 타입의 변수를 가지고 있습니다. 이 변수는 색상을 적용할 객체를 참조합니다.
    • Shape 클래스에는 추상 메서드 draw가 정의되어 있으며, 이는 구체적인 도형 클래스에서 구현됩니다.
  4. Circle과 Square 클래스 (Refined Abstractions):
    • Circle과 Square 클래스는 Shape 클래스를 확장하며, 각각 draw 메서드를 구현합니다.
    • draw 메서드는 도형을 그리고, 색상을 적용하는 메서드를 호출합니다.
  5. 클라이언트 코드:
    • BridgePatternDemo 클래스의 main 메서드는 브리지 패턴의 예제를 실행합니다.
    • Red와 Blue 객체를 생성하고, 이를 Circle과 Square 객체에 전달합니다.
    • circle.draw()와 square.draw()를 호출하여 도형을 그리고 색상을 적용합니다.

이 예제를 통해 브리지 패턴이 추상화와 구현을 분리하여 독립적으로 확장할 수 있도록 하는 방법을 볼 수 있고 이 패턴은 코드의 유연성과 확장성을 높여줄수 있다는 것을 알 수 있습니다.