[java] 브릿지 패턴
브릿지 패턴은 객체의 인터페이스와 구현을 분리하는 구조적 디자인 패턴입니다. 이 패턴을 사용하면 추상화된 부분과 구현부분을 독립적으로 확장할 수 있습니다.
문제
객체의 인터페이스와 구현을 밀접하게 결합하면, 하나의 변경이 다른 부분에 미치는 영향을 최소화하기 어렵습니다. 예를 들어, 특정 모양의 그리기 도구를 만들고자 할 때, 다양한 색상으로 그리기를 지원하고 싶을 수 있습니다. 하지만 모든 색상에 대해 각각의 모양 클래스를 만들게 되면 결합이 높아지고 유지보수가 어려워집니다.
해결책
브릿지 패턴은 이러한 문제를 해결하기 위해 추상화된 인터페이스와 구현부를 별도의 계층으로 분리합니다. 추상화된 인터페이스에 해당하는 클래스와 구현에 해당하는 클래스를 각각 정의하고, 이들을 연결하는 브릿지 역할을 하는 클래스를 도입합니다. 이를 통해 추상화된 클래스와 구현부가 독립적으로 확장 및 변경될 수 있게 됩니다.
브릿지 패턴의 구성 요소
Abstraction
- 인터페이스를 정의하고 구현 객체에 대한 참조를 유지합니다.
RefinedAbstraction
- Abstraction 인터페이스를 확장하여 구현을 이용합니다.
Implementor
- 구현을 위한 인터페이스를 정의합니다.
ConcreteImplementor
- Implementor 인터페이스를 구현합니다.
브릿지 패턴의 장단점
장점
- 추상화된 부분과 실제 구현을 분리함으로써 각각을 독립적으로 확장 및 변경할 수 있습니다.
- 클라이언트와 구현부를 독립적으로 다룰 수 있어 복잡성을 줄일 수 있습니다.
단점
- 구현과 추상화 사이에 추가적인 클래스와 객체가 도입되어 복잡성을 증가시킬 수 있습니다.
브릿지 패턴은 객체의 인터페이스와 구현을 분리하여 독립적으로 확장 및 변경할 수 있게 해주는 유용한 디자인 패턴입니다. 이는 유연한 설계와 복잡성 관리를 위한 중요한 도구로서 사용될 수 있습니다.
참고 자료
- 브릿지 패턴 - 위키백과
- Design Patterns: Elements of Reusable Object-Oriented Software, Gamma et al.