Bridge

클래스 또는 밀접하게 연관된 클래스들의 집합을 두 개의 개별 계층구도(추상화 및 구현)로 나눈 뒤 각각 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴이다.

Problem

ex) CircleSquare라는 한 쌍의 자식 클래스들이 있는 기하학적 Shape 클래스가 있다고 가정해 본다. 이 클래스 계층구조를 확장하여 Color를 도입하기 위해 Red, Blue (Shape를 상속한 자식 클래스) 클래스들을 만들 계획이다.

그러나, 이미 두 개의 자식 클래스가 있으므로 BlueCircle, RedSquare와 같은 네 가지의 클래스 조합을 만들어야 한다.

Untitled

새로운 Shape 타입들과 색상 Type들을 추가할 때마다 계층 구조는 기하급수적으로 많이 만들어진다.

ex) Triangle Shape 를 ****추가하려면 각 Color별로 하나씩(빨강, 파란) 두 개의 자식 클래스들을 도입해야 한다. 그 후에 또 새 색상을 추가하려면 각 Shape Type별로 하나씩 세 개의 자식 클래스를 만들어야 한다.

Summary

Solution

위의 문제는 Shape와 Color의 두 Shape 클래스들을 확장하려고 하기 때문에 발생한다. 이것은 클래스 상속과 관련된 일반적인 문제이다.

Bridge Pattern 은 상속에서 객체 합성으로 전환하여 이 문제를 해결하는 것이다.

이것이 의미하는 바는 하나의 별도 클래스 계층구조로 추출하여 원래 클래스들이 한 클래스 내에서 모든 상태와 행동들을 갖는 대신 새 계층 구조의 객체를 참조하도록 하는 것이다.

Untitled