어댑터 패턴은
- 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환합니다.
- 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 도와줍니다.
터키를 오리처럼 작동하게 하는 어댑터
public interface Duck {
void quack();
void fly();
}
public interface Turkey {
void gobble();
void fly();
}
public class TurkeyAdapter implements Duck{
Turkey turkey;
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
turkey.fly();
}
}
클라이언트에서 어댑터를 사용하는 방법
- 클라이언트에서 타깃 인터페이스로 메소드를 호출해서 어댑터에 요청을 보냅니다.
- 어댑터는 어댑티 인터페이스로 그 요청을 어댑티에 관한 메소드 호출로 변환합니다.
- 클라이언트는 호출 결과를 받지만 중간에 어댑터가 있다는 사실을 모릅니다.
예시
상품과 배송의 종류에(일반배송, 직매입, 해외 배송 등등) 따라서 여러가지 형태의 배송 도메인 객체를 가질 수 있지만,
클라이언트(FE, App)에 나가는 DTO는 동일한 형식으로 나가야 하는 그런 때가 있다. 이런 경우에 어댑터 패턴을 사용하면 좋을 것 같다.
참고
https://byulmuri.wordpress.com/2010/07/26/adapter-pattern/
에릭 프리먼, 엘리자베스 롭슨, 케이시 시에라, 버트 베이츠. 『헤드퍼스트 디자인패턴 개정판』. 한빛미디어, 2022
'Design Pattern' 카테고리의 다른 글
템플릿 메소드 패턴 (Template Method Pattern) (1) | 2023.10.26 |
---|---|
퍼사드 패턴 (Facade Pattern) (1) | 2023.10.24 |
커맨드 패턴 (Command Pattern) (0) | 2023.09.27 |
싱글턴 패턴(Singleton Pattern) (2) | 2023.09.25 |
팩토리 패턴(Factory Pattern) (0) | 2023.09.14 |