[디자인 패턴] 브릿지(Bridge) 패턴

❓브릿지 패턴?

브릿지 패턴은 구조 패턴의 하나로, 다른 용어로 핸들(Handle) 패턴, 구현부 패턴이라고 합니다. 객체의 확장성을 향상시키기 위한 패턴으로, 객체에서 동작을 처리하는 구현부와 확장을 위한 추상부로 분리하는 패턴을 말합니다.

구현부, 추상부로 분리하는 예시를 통해 확인해 봅시다.

❗브릿지 패턴의 예시 (JS)

// 구현부 인터페이스
class Implementor {
  sendData(data) {
    throw new Error("오바리이딩 되지 않았습니다.");
  }
}

// 하위 구현부 클래스A
class ConcreteImplementorA extends Implementor {
  sendData(data) {
    console.log("A 데이터를 보냅니다.", data);
  }
}

// 하위 구현부 클래스B
class ConcreteImplementorB extends Implementor {
  sendData(data) {
    console.log("B 데이터를 보냅니다.", data);
  }
}

// 추상부 인터페이스
class Abstraction {
  constructor(impl) {
    this.implementor = impl;
  }

  send(data) {
    this.implementor.sendData(data);
  }
}

// 추상부 하위 클래스
class RefinedAbstraction extends Abstraction {
		// 추가 기능...
	consoleAddFn(){
		console.log('추가 된 기능입니다')
	}
}

구현부와 추상부를 분리함으로써 각각 독립적으로 작동, 확장 할 수 있게 하였습니다. 새로운 구현을 추가하는 상황에서 굉장히 유연하게 작동하겠죠? 이를 아래 코드로 실행 해보겠습니다.

const implementorA = new ConcreteImplementorA();
const implementorB = new ConcreteImplementorB();

const abstractionA = new Abstraction(implementorA);
abstractionA.send("추상부 A를 통해 독립적으로 작동");

const abstractionB = new RefinedAbstraction(implementorB);
abstractionB.send("추상부 B를 통해 독립적으로 작동");
abstractionB.consoleAddFn(); // '추가 된 기능입니다'

이렇게 각각 독립적으로 작동할 수 있게 되었습니다. 이를 통헤 유지 보수성이 좋아졌다고 할 수 있겠네요!

❗결론!

디자인 패턴의 고전 ‘GoF’(Gang of Four)는 브리지 패턴을 다음과 같이 정의합니다.

‘2개의 객체는 추상화를 구현에서 분리하여 매우 독립적으로 사용할 수 있어야 한다’

하나의 완전한 인터페이스로 결합하는 것이 아닌 구현부, 추상부 2개의 계층으로 분리함으로써 독립적으로 동작, 확장할 수 있게 되는 것이 브릿지 패턴의 핵심이라고 할 수 있겠습니다!