Adapter Pattern
클래스나 인터페이스가 호환되지 않는 상황에서 호환성을 제공
- 타입 통일 못 건드리는 OuterTiger 클래스를 사용 가능하게, TigerAdapter 생성 및 상속받기
- override 구현
- OuterTiger의 String 타입 들고오기 - getName은 String 타입
- 오버라이딩:
TigerAdapter
가Animal
의getName()
을 재정의OuterTiger
의getFullname()
메서드 결과 반환 - 동적 바인딩:
Animal
타입으로 전달된TigerAdapter
객체가 실행 시점에getName()
메서드 호출하여OuterTiger
이름 반환
public class App {
public static void main(String[] args) {
Doorman doorman = new Doorman();
OuterTiger outerTiger = new OuterTiger();
TigerAdapter ta = new TigerAdapter(outerTiger);
Cat cat = new Cat();
Mouse mouse = new Mouse();
doorman.쫓아내(ta);
doorman.쫓아내(cat);
doorman.쫓아내(mouse);
}
}
// 못 건드리는 외부 라이브러리
public class OuterTiger {
private String fullname = "호랑이";
public String getFullname() {
return fullname;
}
}
// OuterTiger 와 Cat, Mouse 등과의 이질적인 것을 동일하게 맞추는 역할
public class TigerAdapter extends Animal {
// 컴퍼지션: 어댑터가 대상 객체를 자신의 속성으로 포함
// new 객체 생성 > 생성 객체를 특정 클래스 필드 포함 시, 컴퍼지션 발생
OuterTiger tiger = new OuterTiger();
public TigerAdapter(OuterTiger tiger) {
this.tiger = tiger;
}
@Override
public String getName() {
return tiger.getFullname();
}
}
public class Doorman {
public void 쫓아내(Cat cat) {
System.out.println(cat.getName() + " 쫓아내");
}
}
public class Mouse {
private String name = "쥐";
public String getName() {
return name;
}
}
public class Cat {
private String name = "고양이";
public String getName() {
return name;
}
}
Share article