*9. Bridge - 기능 계층과 구현 계층을 나눈다
9. Bridge - 기능 계층과 구현 계층을 나눈다
브리지 패턴(Bridge Pattern)은 객체 지향 디자인 패턴 중 하나로, 구현부와 추상을 분리하여 두 부분이 독립적으로 변화할 수 있게 하는 패턴입니다. 이 패턴은 객체의 추상화와 구현을 분리하여 두 부분을
독립적으로 확장 및 변화시킬 수 있도록 도와주며, 특히 다양한 기능을 지원하기 위해 클래스 계층 구조를 확장하지 않고도 새로운 클래스를 추가할 수 있도록 해줍니다.
브리지 패턴의 주요 요소는 다음과 같습니다:
Abstraction (추상화): 이 부분은 클라이언트 코드가 상호작용하는 주요 인터페이스를 나타냅니다. 추상화는 구현부와 분리되어 구체적인 구현부를 변경하지 않고도 클라이언트와 상호작용할 수 있도록 합니다.
Implementor (구현자): 이 부분은 추상화에 대한 실제 구현을 제공하는 인터페이스를 나타냅니다. 구현자 인터페이스는 구체적인 구현 클래스에서 구현됩니다.
Refined Abstraction (세분화된 추상화): 추상화의 하위 클래스로, 추가적인 기능이나 변형을 제공할 수 있습니다.
Concrete Implementor (구현자 구체 클래스): 구현자 인터페이스를 실제로 구현하는 클래스입니다. 여러 개의 구현자 클래스가 있을 수 있으며, 이들은 서로 다른 방식으로 작동할 수 있습니다.
브리지 패턴의 주요 목표는 추상화와 구현을 서로 독립적으로 확장 및 변화시키는 것입니다. 이로써 시스템을 더 유연하게 만들고, 새로운 구현자 클래스를 추가하거나 새로운 추상화를 도입할 때 시스템을 변경하지 않고
확장할 수 있게 됩니다. 이 패턴은 특히 복잡한 시스템에서 중요한 역할을 합니다.
Java에서 브리지 패턴을 구현할 때, 추상화와 구현자를 각각 인터페이스나 추상 클래스로 정의하고, 구현자를 실제로 구현하는 구체 클래스를 만들어서 사용합니다. 이렇게 함으로써 추상화와 구현자 간의 결합도를 낮추고,
유지보수와 확장성을 개선할 수 있습니다.
예제
브리지 패턴의 예제를 보여주기 위해, 간단한 모양(Shape)과 색깔(Color)을 조합하여 그림을 그리는 예제를 만들어보겠습니다. 여기서 모양은 추상화(Abstraction) 역할을 하고, 색깔은 구현자(
Implementor) 역할을 합니다.
// Implementor: Color interface
interface Color {
void applyColor();
}
// Concrete Implementors: RedColor and GreenColor
class RedColor implements Color {
@Override
public void applyColor() {
System.out.println("Applying red color");
}
}
class GreenColor implements Color {
@Override
public void applyColor() {
System.out.println("Applying green color");
}
}
// Abstraction: Shape interface
abstract class Shape {
protected Color color;
public Shape(Color color) {
this.color = color;
}
public abstract void draw();
}
// Refined Abstraction: Circle and Square
class Circle extends Shape {
public Circle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.print("Drawing a circle - ");
color.applyColor();
}
}
class Square extends Shape {
public Square(Color color) {
super(color);
}
@Override
public void draw() {
System.out.print("Drawing a square - ");
color.applyColor();
}
}
public class BridgePatternExample {
public static void main(String[] args) {
Color red = new RedColor();
Color green = new GreenColor();
Shape redCircle = new Circle(red);
Shape greenSquare = new Square(green);
redCircle.draw(); // Drawing a circle - Applying red color
greenSquare.draw(); // Drawing a square - Applying green color
}
}
위의 예제에서는 모양(Shape)과 색깔(Color)을 브리지 패턴을 사용하여 분리하고, 각각의 변경 가능한 부분을 독립적으로 확장할 수 있습니다. Shape 클래스가 Color 인터페이스를 가지고 색을 적용하며,
이로써 다양한 모양과 색깔을 조합하여 그림을 그릴 수 있습니다.