Bridge Pattern

Bridge 디자인 패턴의 필요성과 그 구조에 대해 알아봅니다.읽는데 3분 정도 걸려요.

필요성

자동차를 만든다고 가정해보자.
자동차에는 셀 수 없는 여러 부품들이 종합적으로 들어가서 만들어질텐데, 만약 그 부품이 모두 종속적으로 연결되어 있다면?
부품 교체는 물론이고, 개발하는 것도 여러 사람이 분산해서 개발하지 못할 것이다.

각 부분을 독립적으로 개발하고, 확장을 유연하게 하기 위해 Bridge pattern을 사용한다.

Bridge Pattern

Product.java
public interface Product {
  public String productName();
  public void produce();
}

유연한 확장을 위해 인터페이스를 정의한다.
자동차의 부품에 해당하는 부분이다.

CentralLocking.java
public class CentralLocking implements Product {
  private final String productName;

  public CentralLocking(String productName) {
    this.productName = productName;
  }
  // override methods
}
GearLocking.java
public class GearLocking implements Product {
  private final String productName;

  public GearLocking(String productName) {
    this.productName = productName;
  }
  // override methods
}

그리고, 여러 사람이 인터페이스에 맞게 부품을 개발한다.

Car.java
public abstract class Car {
  private final Product product;
  private final String carType;

  public Car(Product product, String carType) {
    this.product = product;
    this.carType = carType;
  }

  public abstract void assemble();
  public abstract void produceProduct();
}

그리고 자동차의 뼈대를 만들어준다.

이 때, product를 인터페이스로 만들었기에 유연한 확장과, Car과 독립적으로 product를 개발할 수 있게되는데, 이것이 Bridge pattern 이다.

Motoren.java
public class Motoren extends Car {
  public Motoren(Product product, Strint carType) {
    super(product, carType);
  }

  @override
  public void produceProduct() {
    product .produce();
    // ...
  }
}

그럼 자동차를 조립하는 입장에서는 produce의 내부 구조는 알 필요없이 인터페이스만을 가지고 독립적으로 개발할 수 있게 된다.