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
}
}
그현된 코드를 설명하면 다음과 같다.
- Color 인터페이스 (Implementor):
- Color 인터페이스는 applyColor 메서드를 정의합니다. 이 메서드는 색상을 적용하는 역할을 합니다.
- Red와 Blue 클래스 (Concrete Implementors):
- Red와 Blue 클래스는 Color 인터페이스를 구현하며, 각각 빨간색과 파란색을 적용하는 메서드를 구현합니다.
- Shape 추상 클래스 (Abstraction):
- Shape 추상 클래스는 Color 타입의 변수를 가지고 있습니다. 이 변수는 색상을 적용할 객체를 참조합니다.
- Shape 클래스에는 추상 메서드 draw가 정의되어 있으며, 이는 구체적인 도형 클래스에서 구현됩니다.
- Circle과 Square 클래스 (Refined Abstractions):
- Circle과 Square 클래스는 Shape 클래스를 확장하며, 각각 draw 메서드를 구현합니다.
- draw 메서드는 도형을 그리고, 색상을 적용하는 메서드를 호출합니다.
- 클라이언트 코드:
- BridgePatternDemo 클래스의 main 메서드는 브리지 패턴의 예제를 실행합니다.
- Red와 Blue 객체를 생성하고, 이를 Circle과 Square 객체에 전달합니다.
- circle.draw()와 square.draw()를 호출하여 도형을 그리고 색상을 적용합니다.
이 예제를 통해 브리지 패턴이 추상화와 구현을 분리하여 독립적으로 확장할 수 있도록 하는 방법을 볼 수 있고 이 패턴은 코드의 유연성과 확장성을 높여줄수 있다는 것을 알 수 있습니다.