소프트웨어에 대한 모든 것

[디자인패턴][Bridge] 브릿지 패턴 본문

시스템 설계 및 디자인/디자인 패턴

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

앤테바 2022. 3. 25. 11:55
반응형

브릿지 패턴 정의

  • 기능 클래스 계층과 구현 클래스 계층을 연결해주는 패턴
  • 기능 클래스, 구현 클래스는 서로 영향을 주지 않고 구조적으로 변경할 수 있음
  • 브릿지 패턴은 상속보다는 구성을 선호
브릿지 패턴의 의도는
추상화를(기능) 구현에서 분리하여
두 가지가 독립적으로 변할 수 있도록 하는 것

 

 

출처 - https://refactoring.guru/design-patterns/bridge

 

브릿지 패턴 장점

예를 들어서, Shape(원, 사각)이 있고 색깔(Red, Blue)이 있는 경우 브릿지 패턴을 적용하지 않으면 각각 4개의 클래스가 존재합니다. 여기에서 새로운 shape이나 새로운 Color가 추가된다면 exponentially하게 클래스 수가 증가합니다. 너무 비효율적이고 관리도 어렵습니다. 브릿지 패턴을 적용해서 기능부, 구현부를 나눈다면 새로운 Shape나 Color가 추가되도 각 층에 클래스가 하나만 추가하면 해결할 수 있습니다. 기능 계층, 구현 계층이 분리되어 있기 때문에 독립적으로 확장 가능한 디자인 입니다.

 

브릿지 패턴 적용 전 브릿지 패턴 적용 후
 

<출처, https://refactoring.guru/design-patterns/bridge>

브릿지 패턴 클래스 다이어그램

Bridge 패턴 Class Diagram

 

브릿지 패턴 활용

 

 

  • Shape은 기능 클래스 계층
  • Color은 구현 클래스 계층
  • Shape 클래스는 Color 객체를 가지고 있으며 구현부의 브릿지 역할을 함

 

from abc import ABC, abstractmethod


class Color(ABC):
    """ 구현부 추상 클래스 """
    @abstractmethod
    def fill_color(self):
        pass


class RedColor(Color):
    def fill_color(self):
        print('fill Red color')


class BlueColor(Color):
    def fill_color(self):
        print('fill Blue color')


class Shape(ABC):
    """ 기능부 추상 클래스 """
    def __init__(self, color):
        self.color = color

    @abstractmethod
    def color_it(self):
        pass


class Rectangle(Shape):
    def __init__(self, color):
        super().__init__(color)

    def color_it(self):
        print('Rectangle filled with ', end='')
        self.color.fill_color()


class Circle(Shape):
    def __init__(self, color):
        super().__init__(color)

    def color_it(self):
        print('Circle filled with ', end='')
        self.color.fill_color()


blue_rectangle = Rectangle(BlueColor())
blue_rectangle.color_it()

red_circle = Circle(RedColor())
red_circle.color_it()

요약

  • 두 개의 서로 다른 계층을 만듬 (기능 계층, 구현 계층)
  • 기능 계층, 구현 계층의 종속성을 제거
  • 브릿지 패턴은 기능 계층과 구현 계층 사이를 조정하는 다리를 만듬
  • 기능 계층, 구현 계층 별도로 확장할 수 있음
  • 런타임에 구현을 전환(변경) 할 때 사용해야 함

 

참고 자료

https://www.geeksforgeeks.org/bridge-method-python-design-patterns/

https://pythonwife.com/bridge-design-pattern-with-python/

https://stackabuse.com/the-bridge-design-pattern-in-python/

https://refactoring.guru/design-patterns/bridge

 

 

반응형
Comments