어댑터 패턴

호환되지 않는 인터페이스를 호환되게 하는 패턴으로, 문자 치환 프로그램등을 예로 들 수 있습니다.

실제 적용 예시

  • 서로 인터페이스 구조가 다를때 중계인으로 이런 문제를 해결해줍니다. (전원 플러그 어댑터)
interface Printer {
  print();
}

interface ColorPrinter {
  printColor();
}

class BasicPrinter implements Printer {
  print() {
    console.log('기본 프린터가 출력 중 입니다');
  }
}

class RGBPrinter implements ColorPrinter {
  printColor() {
    console.log('색상 프린터가 출력 중 입니다');
  }
}

class Adapter implements Printer {
  constructor(private colorPrinter: ColorPrinter) { }

  print() {
    this.colorPrinter.printColor();
  }
}

const printers: Printer[] = [
  new BasicPrinter(),
  new Adapter(new RGBPrinter()),
]

언제 사용할까 ?

같은 클래스를 사용하고 싶은데 인터페이스가 전부 호환되지 않을때 사용한다. 공통 기능이 없는데 그룹핑 하여 사용할때 많이 사용한다.

장점

  • 어댑터를 사용하기때문에 기존 클래스를 더렵게 변형하지 않아도 된다.

단점

  • 코드의 양이 늘어난다. 어댑팅을 위한 클래스가 생기는것이기 때문에.