브리지 패턴은 객체 지향 프로그래밍에서 사용되는 디자인 패턴 중 하나입니다. 이 패턴은 추상화와 구현을 분리하여 두 개의 클래스 계층을 독립적으로 확장할 수 있도록 도움을 줍니다. 이번 포스트에서는 파이썬에서 브리지 패턴과 추상화 분리에 대해 알아보겠습니다.
브리지 패턴은 다른 클래스 계층의 기능을 연결하여 두 개의 계층을 독립적으로 확장할 수 있도록 하는 구조입니다. 이 패턴은 추상화와 구현을 분리하기 때문에, 변경이 있는 경우 한 쪽 계층을 수정하지 않고 다른 쪽 계층을 확장할 수 있습니다. 이를 통해 코드의 유연성과 확장성을 향상시킬 수 있습니다.
파이썬에서 브리지 패턴을 구현하기 위해 추상화와 구현을 나누는 인터페이스와 클래스를 사용합니다. 추상화는 기능의 추상 인터페이스를 제공하고, 구현은 실제 구현을 제공합니다. 이를 통해 추상화와 구현을 독립적으로 확장할 수 있습니다.
아래 코드 예시를 통해 파이썬에서 브리지 패턴을 어떻게 구현할 수 있는지 살펴보겠습니다.
# 추상화의 인터페이스 정의
class Abstraction:
def __init__(self, implementation):
self.implementation = implementation
def operation(self):
return self.implementation.do_operation()
# 구현의 인터페이스 정의
class Implementation:
def do_operation(self):
raise NotImplementedError()
# 구현의 실제 클래스 정의
class ConcreteImplementation1(Implementation):
def do_operation(self):
return "Operation 1"
class ConcreteImplementation2(Implementation):
def do_operation(self):
return "Operation 2"
# 추상화와 구현을 연결하는 클래스 정의
class ConcreteAbstraction(Abstraction):
def operation(self):
return f"Abstracted {self.implementation.do_operation()}"
위 코드에서 Abstraction
클래스는 추상화의 인터페이스를 정의하고, Implementation
클래스는 구현의 인터페이스를 정의합니다. ConcreteImplementation1
과 ConcreteImplementation2
는 구현의 실제 클래스입니다.
ConcreteAbstraction
클래스는 Abstraction
클래스를 상속하며, 구현의 인스턴스를 생성하여 추상화와 구현을 연결합니다. 이를 통해 operation
메소드를 실행할 때, 추상화와 구현이 연결되어 동작하게 됩니다.
# 브리지 패턴 사용 예시
implementation1 = ConcreteImplementation1()
implementation2 = ConcreteImplementation2()
abstraction1 = ConcreteAbstraction(implementation1)
abstraction2 = ConcreteAbstraction(implementation2)
print(abstraction1.operation()) # Output: Abstracted Operation 1
print(abstraction2.operation()) # Output: Abstracted Operation 2
위 예시에서는 ConcreteAbstraction
클래스에 ConcreteImplementation1
과 ConcreteImplementation2
를 연결하여 operation
메소드를 실행한 결과를 출력합니다. Abstracted
접두사가 붙은 결과는 추상화와 구현이 연결되었음을 나타냅니다.
브리지 패턴은 코드의 유연성과 확장성을 향상시키기 위해 추상화와 구현을 분리하는 유용한 디자인 패턴입니다. 파이썬에서도 이 패턴을 적용하여 객체 지향 프로그래밍을 보다 효과적으로 구현할 수 있습니다.