설계패턴 15. Bridge Pattern

LSDrug·2024년 6월 11일

설계패턴(完)

목록 보기
15/26
post-thumbnail


1. 들어가기 전에...

기능과 구현의 차이

  • 기능의 클래스 계층 : 어떠한 행동을 하는 것
  • 구현의 클래스 계층 : 실제로 동작하게끔 만드는 것.

Abstraction(기능)

  • High level Layer
  • 어플리케이션의 Interface 혹은 UI

Implementor(구현)

  • 어플리케이션에서 돌아가는 실제 구현 코드

우리가 생각하는 패턴

  • Abstraction만 볼 수 있고 내부의 실제 Implementor은 숨길 수 있는 구조이다.
  • 외부에서 보여지는 것과 내부 Implementor를 분리하고자 할 때 사용하기 좋다.

2. 필요성

  • 우리가 하위 클래스를 만들려고 할 때, 자신의 의도를 다음과 같이 생각할 필요가 있다.

  • 기능을 추가하려고 하는가? 기능을 수행하려고 하는가?

  • 클래스 계층이 하나라면 기능의 클래스 계층구현의 클래스 계층하나의 구조 안에 혼재될 수 있다.

  • 이렇게 되면 클래스 계층을 복잡하게 하여 예측을 어렵게 한다.

  • 하위 클래스를 만들려고 할 때 클래스 계층의 어디에 만들어야 할 지 헤매게 된다.

  • 기능의 클래스 계층구현의 클래스 계층을 두 개의 독립된 클래스 계층으로 분리하는 것이 필요하다.

  • 그러나, 단순히 분리해버리면 흩어지기 때문에 두 개의 클래스 계층 사이에 다리를 놓아줄 필요가 있다.

이를 만족시키는 패턴이 Bridge Pattern이다.

3. 정의

  • Abstraction 과 implementor을 분리해서 independent하게 만든다.
  • Abstraction 과 implementor 사이에 다리를 놓는 역할의 패턴

4. 분리해 두면 확장이 편해진다.

Bridge 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 분리하는 것이다. 이 두 개의 클래스 계층을 분리해 두면 각각의 클래스 계층을 독립적으로 확장할 수 있다.

기능을 추가하고 싶으면 기능의 클래스 계층에 클래스를 추가할 수 있고, 이때 구현의 클래스 계층은 전혀 수정할 필요가 없다.

새로 추가한 기능은 '모든 구현'에 대해 이용할 수 있다.

5. 상속은 견고한 연결, 위임은 느슨한 연결

상속은 클래스를 확장하기 위해 편리한 방법이지만 클래스간 연결을 강하게 고정시킨다.

class SomethingGood(Something)

SomethingGood 클래스는 SOmething 클래스의 하위 클래스가 되며, 이 관계는 소스코드를 고쳐쓰지 않는 한 바꿀 수 없는 매우 견고한 연결이 된다.

클래스간 관계를 척척 바꾸고 싶을 때 상속을 사용하는 것은 부적절 할 수 있다. 교체할 때마다 소스 코드를 변경할 수 없기 때문이다.

이런 경우 '상속'이 아니라 '위임'을 사용하는 것이 적절하다.

새로운 concrete implementor를 만들더라도 인스턴스만 abstraction으로 넘겨주면 소스코드 수정이 필요없이 바로 연결된다.


profile
마약같은 코딩, 마약같은 코딩러

0개의 댓글