디자인 패턴 - Bridge 패턴

code_able·2024년 11월 21일
0

Bridge 패턴이란

객체의 구현부와 추상부를 분리하여 독립적으로 확장할 수 있도록 설계하는 구조적 디자인 패턴입니다. 이 패턴은 기능 계층과 구현 계층을 분리하여, 하나의 계층을 변경해도 다른 계층에 영향을 주지 않도록 설계합니다.

목적

  • 기능(Fuctionality)와 구현(Implementation)을 분리하여 독립적인 확장을 가능하게 합니다.
  • 계층 구조가 복잡해지는 것을 방지하고, 코드의 유연성과 확장성을 높입니다.
  • 런타임 시에 구현 객체를 동적으로 변경할 수 있습니다.

구조

  • Abstraction (추상화):
    • 기능 계층을 정의합니다.
    • 구현 객체에 대한 참조를 포함하고, 클라이언트가 사용할 인터페이스를 제공합니다.
  • Implementor (구현부):
    • 구체적인 구현을 정의합니다.
    • 추상화 계층에 의해 호출됩니다.
  • RefinedAbstraction (확장된 추상화):
    • Abstraction을 확장하여 추가 기능을 제공합니다.
  • ConcreteImplementor (구체적인 구현부):
    • Implementor의 구체적인 구현을 제공합니다.

장점

  • 기능과 구현의 독립적인 확장이 가능합니다. 하나를 변경해도 다른 계층에 영향을 미치지 않습니다.
  • 런타임에서 구현 객체를 동적으로 변경할 수 있습니다.
  • 복잡성 감소: 상속 관계가 많아지는 문제를 해결합니다.

단점

  • 계층 분리를 위해 구현이 복잡해질 수 있음.
  • 초기 설계 단계에서 계층을 명확히 구분하는 설계가 요구됩니다.

브리지 패턴의 예제

# Implementor: 색상을 정의하는 인터페이스
class Color:
    def apply_color(self):
        pass


# ConcreteImplementor: 색상의 구체적인 구현
class Red(Color):
    def apply_color(self):
        return "Red"


class Blue(Color):
    def apply_color(self):
        return "Blue"


# Abstraction: 모양을 정의하는 클래스
class Shape:
    def __init__(self, color: Color):
        self.color = color

    def draw(self):
        pass


# RefinedAbstraction: 모양의 구체적인 확장
class Circle(Shape):
    def draw(self):
        return f"Circle filled with {self.color.apply_color()} color"


class Square(Shape):
    def draw(self):
        return f"Square filled with {self.color.apply_color()} color"


# Client Code
red = Red()
blue = Blue()

circle = Circle(red)
square = Square(blue)

print(circle.draw())  # Output: Circle filled with Red color
print(square.draw())  # Output: Square filled with Blue color
profile
할수 있다! code able

0개의 댓글