본문 바로가기

프로그래밍/디자인패턴

[디자인패턴] Bridge 패턴


브릿지추상화 부분과 구현 부분을 분리하는 패턴입니다. 

기능(추상화 부분)과 구현을 별도의 클래스로 정의해 분리하는 방법으로 두 클래스를 서로 다른 계층 구조에 넣어 모두 변경 가능하게 합니다.


기능과 구현을 각각 정의한 후 구현에 관련된 클래스를 기능 클래스가 포함!합니다. 이렇게 하면 기능과 구현이 분리된 것을 알 수 있고, 최적화된 클래스 설계가 가능합니다. 또한 구현을 완전히 숨길 수 있다는 장점이 있습니다.



예를 들어보면, 


두 클래스 무기와 종족이 있습니다.



<무기 클래스>



<종족 클래스>



<main>


<출력 결과>



종족에는 인간과 엘프가 있으며 무기에는 칼과 활이 있습니다.

종족이 무기를 사용하는 것이므로 종족에 무기가 포함됩니다. (아래 클래스 다이어그램에서 볼 수 있듯이, cTribe가 cWeapon을 멤버 변수로 가지고 있습니다.)


종족의 인간, 엘프 생성자에서 무기에 대한 정보를 받고, 내부 Attack함수에서 무기를 Use합니다.



클래스 다이어그램입니다.




cTribe클래스는 기능(추상) 클래스이고, cWeapon클래스는 구현 클래스입니다. 말했듯 기능 클래스가 구현 클래스를 포함합니다.

두 클래스는 하위 클래스 추가가 가능하고, 포함관계를 통해 구성관계(Bridge)에 있습니다.



브릿지 패턴은 완전한 결합이 아니기 때문에 분리된 구현과 추상화된 부분의 독립적인 확장이 가능합니다.


브릿지는 보통 자식클래스의 증가 없이 다양한 구현이 필요할 때 사용됩니다. 또한, 여러 플랫폼에서 사용할 그래픽스 및 윈도우 처리에서 유용하게 쓰이며 인터페이스의 실제 구현부를 서로 다른방식으로 변경할 경우 사용됩니다.


하지만 구조가 복잡하다는 단점이 있습니다.




아래 파일은 Bridge 패턴을 C++로 구현한 것이며, wiki에 있는 예를 넣어둔 것입니다.


121115_MS_Bridge_Patten_Example.zip