Search

브리지 패턴

브리지 패턴(Bridge Pattern)

브리지 패턴은 객체의 구현부와 인터페이스를 분리하여 각자 독립적으로 변형이 가능하게 만드는 디자인 패턴 중 하나이다. 이 패턴을 사용하면 추상화와 구현을 분리하여, 두 개념이 서로 독립적으로 확장될 수 있게 한다.

언제 사용할까?

브리지 패턴은 다음과 같은 상황에서 사용될 수 있다.
추상화와 구현을 독립적으로 확장하고자 할 때
추상화와 구현 사이의 결합도를 최소화하고자 할 때
구현부를 변경해도 추상화에 영향을 주지 않고자 할 때

구조

브리지 패턴은 **추상화(Abstraction)**와 **구현(Implementation)**으로 구성된다. 추상화는 구현에 의존하지만, 구현은 추상화에 의존하지 않는다.
Abstraction(추상화): 추상화된 인터페이스를 정의하고, 구현부 객체를 참조한다.
Refined Abstraction(개선된 추상화): Abstraction 클래스를 확장하여 추가적인 기능을 제공한다.
Implementation(구현): 구현부 인터페이스를 정의하고, 구현부를 구현한다.
Concrete Implementation(구체적인 구현): Implementation 클래스를 구현한다.

예시

예를 들어, 다음과 같은 구조를 가진 페이지 출력 시스템이 있다고 가정해보자.
이 시스템에서는 페이지(Page)의 종류(Text, Image)와 출력 방식(Printer)을 조합하여 출력한다. 이때 브리지 패턴을 사용하면 다음과 같은 구조를 가지게 된다.
추상화를 담당하는 클래스인 Page는 구현부를 참조하는 Printer 객체를 가지고 있다. 구현부는 PrinterImpl 인터페이스를 구현하는 TextPrinterImagePrinter 클래스로 이루어져 있다. 이렇게 브리지 패턴을 사용하면, Page와 Printer 각각을 독립적으로 확장할 수 있게 된다.

장점

브리지 패턴을 사용하면 다음과 같은 장점을 가질 수 있다.
추상화와 구현을 분리하여, 각각 독립적으로 확장 가능하다.
추상화와 구현 사이의 결합도를 최소화하여, 코드의 유연성을 높일 수 있다.
구현부를 변경해도 추상화에 영향을 주지 않으므로, 코드의 안정성을 높일 수 있다.

단점

브리지 패턴을 사용하면 다음과 같은 단점이 있다.
클래스의 수가 증가하므로, 코드의 복잡도가 증가할 수 있다.
추상화와 구현 사이의 인터페이스를 설계하는 것이 어려울 수 있다.

결론

브리지 패턴은 객체의 구현부와 인터페이스를 분리하여, 각자 독립적으로 확장할 수 있게 만드는 디자인 패턴이다. 이를 사용하면 추상화와 구현 사이의 결합도를 최소화하여, 코드의 유연성을 높일 수 있다. 하지만 클래스의 수가 증가하고, 인터페이스 설계가 어려울 수 있다는 단점도 있다.