어댑터 패턴
인터페이스가 맞지 않는 기존 객체(어댑티)를, 클라이언트가 기대하는 인터페이스로 변환해 사용하게 하는 패턴
어떤 인터페이스를 클라이언트에서 요구하는 형태로 변환시키는 중개인 역할
인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 수정하지 않고도 사용할수 있게해줌
어댑터는 타깃 인터페이스를 구현하고 내부에 어댑티(adaptee) 인스턴스가 포함되어 있음
어댑티(adaptee): 현재 클라이언트가 기대하는 인터페이스와 맞지 않는 대상 객체
모든 요청은 어댑티에 위임됨
어댑터 구현은 타깃 인터페이스로 지원해야하는 인터페이스 크기의 비례해서 복잡해짐
어댑터는 클라이언트에서 호출하는 많은 부분을 새로운 인터페이스에 맞춰서 고치는 대신 모든 변경 사항을 캡슐화할 클래스 하나만 제공하는 방법
어댑티를 새로 바뀐 인터페이스로 감쌀 때는 객체 구성(composition)을 사용
이런 접근법은 어댑티의 모든 서브클래스에 어댑터를 쓸수 있는 장점이 있음
1. Target 인터페이스
클라이언트가 기대하는 인터페이스
interface Logger {
log(message: string): void
}2. Adaptee 클래스
기대하는 인터페이스와 일치하지 않는 기존 구현체
3. Adapter 클래스
인터페이스 변환 역할
4. 클라이언트 코드
Last updated