[python] 브리지 디자인 패턴
브리지 디자인 패턴은 객체의 추상화와 구현을 분리하여 각각 독립적으로 변경할 수 있도록하는 패턴입니다. 이 패턴을 사용하면 추상화된 객체와 구현된 객체 간의 강한 결합을 피하고, 유연한 코드를 구현할 수 있습니다.
패턴 구성요소
브리지 디자인 패턴은 다음과 같은 구성요소로 이루어집니다:
- 추상화(Abstraction): 구현과 분리된 인터페이스를 정의하는 역할을 합니다. 추상화는 클라이언트의 요구사항을 나타내며, 구현을 위한 메서드를 정의합니다.
- 구체화(Concrete Abstraction): 추상화를 구체화시키는 역할을 합니다. 추상화의 인터페이스를 구현하며, 필요한 구체적인 동작을 수행합니다.
- 구현(Implementation): 추상화에서 정의한 인터페이스를 실제로 구현하는 역할을 합니다. 구현은 추상화와 독립적으로 변경될 수 있어야 합니다.
- 구체적인 구현(Concrete Implementation): 구현을 실제로 구현하는 역할을 합니다. 구현을 위한 구체적인 동작을 수행합니다.
패턴의 예제
브리지 디자인 패턴은 다양한 상황에서 사용될 수 있습니다. 예를 들어, 운송 수단과 운송 방식을 각각 추상화와 구현으로 분리하여 유연한 코드를 구현할 수 있습니다.
# 추상화 클래스
class Transport:
def __init__(self, implementation):
self.implementation = implementation
def travel(self):
pass
# 구체화 클래스
class Car(Transport):
def travel(self):
print("Driving a car")
class Bike(Transport):
def travel(self):
print("Riding a bike")
# 구현 클래스
class Implementation:
def implementation_method(self):
pass
# 구체적인 구현 클래스
class Road(Implementation):
def implementation_method(self):
print("Using the road")
class Path(Implementation):
def implementation_method(self):
print("Using the path")
# 클라이언트 코드
implementation_road = Road()
implementation_path = Path()
car = Car(implementation_road)
bike = Bike(implementation_path)
car.travel() # "Driving a car" 출력
bike.travel() # "Riding a bike" 출력
위 예제에서 Transport 클래스는 추상화를 담당하며, Car와 Bike 클래스는 이를 구체화시킵니다. 마찬가지로 Implementation 클래스는 구현을 담당하며, Road와 Path 클래스는 여기에 구체적인 구현을 제공합니다. 클라이언트는 추상화와 구현을 분리하여 자신의 요구사항에 맞는 객체를 생성하고 사용할 수 있습니다.
이러한 브리지 디자인 패턴을 사용하면 추상화와 구현을 분리하여 한 쪽의 변경이 다른 쪽에 영향을 주지 않도록 할 수 있습니다. 또한, 유연하게 코드를 확장하고 새로운 기능을 추가할 수 있는 장점이 있습니다.
참고 자료
- 브리지 디자인 패턴 - 위키백과
- Bridge Design Pattern - Refactoring Guru
- Design Patterns: Elements of Reusable Object-Oriented Software (Erich Gamma, et al)