두 개의 서로 다른 인터페이스를 가진 클래스를 함께 사용할 수 있도록 해주는 디자인 패턴
1. 주요 개념
- 타깃 인터페이스(Target Interface): 클라이언트가 사용하려고 하는 인터페이스입니다.
- 어댑티(Adaptee): 호환되지 않는 인터페이스를 가진 기존 클래스입니다.
- 어댑터(Adapter): 타깃 인터페이스를 구현하여 어댑티의 인터페이스를 타깃 인터페이스로 변환합니다.
2. 기존 소스 코드
// main
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Mouse mouse = new Mouse();
Cat cat = new Cat();
doorman.쫓아내(cat);
doorman.쫓아내(mouse);
}
}
3. 어댑터 패턴 적용
public class OuterTiger {
private String fullname = "호랑이";
public String getFullname() {
return fullname;
}
}
public class TigerAdapter extends Animal{
// OuterTiger에 의존
private OuterTiger outerTiger;
public TigerAdapter(OuterTiger outerTiger) {
this.outerTiger = outerTiger;
}
@Override
public String getName() {
return outerTiger.getFullname();
}
}
// main
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
Cat cat = new Cat();
Mouse mouse = new Mouse();
OuterTiger outerTiger = new OuterTiger();
TigerAdapter ta = new TigerAdapter(outerTiger);
doorman.쫓아내(cat);
doorman.쫓아내(mouse);
doorman.쫓아내(ta);
}
}
- 타깃 인터페이스는 Animal 클래스입니다.
- 어댑티는 OuterTiger 클래스입니다.
- 어댑터는 TigerAdapter 클래스입니다.
Share article