디자인 패턴 - 구조 패턴(어댑터)
어댑터 패턴
호환되지 않는 인터페이스를 호환되게 하는 패턴으로, 문자 치환 프로그램등을 예로 들 수 있습니다.
실제 적용 예시
- 서로 인터페이스 구조가 다를때 중계인으로 이런 문제를 해결해줍니다. (전원 플러그 어댑터)
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()),
]
언제 사용할까 ?
같은 클래스를 사용하고 싶은데 인터페이스가 전부 호환되지 않을때 사용한다. 공통 기능이 없는데 그룹핑 하여 사용할때 많이 사용한다.
장점
- 어댑터를 사용하기때문에 기존 클래스를 더렵게 변형하지 않아도 된다.
단점
- 코드의 양이 늘어난다. 어댑팅을 위한 클래스가 생기는것이기 때문에.