[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)