우리가 하위 클래스를 만들려고 할 때, 자신의 의도를 다음과 같이 생각할 필요가 있다.
기능을 추가하려고 하는가? 기능을 수행하려고 하는가?
클래스 계층이 하나라면 기능의 클래스 계층과 구현의 클래스 계층이 하나의 구조 안에 혼재될 수 있다.
이렇게 되면 클래스 계층을 복잡하게 하여 예측을 어렵게 한다.
하위 클래스를 만들려고 할 때 클래스 계층의 어디에 만들어야 할 지 헤매게 된다.
기능의 클래스 계층과 구현의 클래스 계층을 두 개의 독립된 클래스 계층으로 분리하는 것이 필요하다.
그러나, 단순히 분리해버리면 흩어지기 때문에 두 개의 클래스 계층 사이에 다리를 놓아줄 필요가 있다.

Bridge 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 분리하는 것이다. 이 두 개의 클래스 계층을 분리해 두면 각각의 클래스 계층을 독립적으로 확장할 수 있다.
기능을 추가하고 싶으면 기능의 클래스 계층에 클래스를 추가할 수 있고, 이때 구현의 클래스 계층은 전혀 수정할 필요가 없다.
새로 추가한 기능은 '모든 구현'에 대해 이용할 수 있다.
상속은 클래스를 확장하기 위해 편리한 방법이지만 클래스간 연결을 강하게 고정시킨다.
class SomethingGood(Something)
SomethingGood 클래스는 SOmething 클래스의 하위 클래스가 되며, 이 관계는 소스코드를 고쳐쓰지 않는 한 바꿀 수 없는 매우 견고한 연결이 된다.
클래스간 관계를 척척 바꾸고 싶을 때 상속을 사용하는 것은 부적절 할 수 있다. 교체할 때마다 소스 코드를 변경할 수 없기 때문이다.
이런 경우 '상속'이 아니라 '위임'을 사용하는 것이 적절하다.
새로운 concrete implementor를 만들더라도 인스턴스만 abstraction으로 넘겨주면 소스코드 수정이 필요없이 바로 연결된다.