Contents
Adapter (어댑터)Adapter (어댑터)
- Proxy와 별개로 해당 객체의 다른 책임을 대신 받아서 처리할 수 있는 객체
- 기존 시스템의 구조를 해치지 않으면서 새 클래스를 기존 시스템에 넣을 수 있도록 변환
어댑터는 책임을 위임 받는 역할이 아님
- 어댑터는 새로운 기능이 추가되어야 할 때 기존 시스템에 맞춰서 끼우기 위한 도구
- 프록시처럼 역할을 위임받는 역할이 아니지만 SRP, DIP를 수행하기 위해 비슷한 역할을 수행할 수 있음
Q1. 동물의 객체 이름이 name이 아닌 fullName으로 왔다면?
- 동물 객체는 name을 이용한 getName을 사용
- OuterTiger는 fullName을 사용하므로 메소드를 맞추어줘야 하는데, 이를 직접 건드리면 안됨
- 다른 곳에서 메소드를 사용 중일 경우 모든 곳을 손봐야 함
// 외부 요소
public class OuterTiger {
private String fullName = "호랑이";
public String getFullName() {
return fullName;
}
}
A : 기존 동물 객체에서 사용하던 name으로 맞춰주는 어댑터가 필요함
// Adapter : Animal 객체에 OuterTiger를 맞추기 위한 수단
public class TigerAdapter extends Animal{
// DI
private OuterTiger outerTiger;
public TigerAdapter(OuterTiger outerTiger) {
this.outerTiger = outerTiger;
}
// extends
@Override
String getName() {
return outerTiger.getFullName();
}
}
public class App {
public static void main(String[] args) {
Mouse m1 = new Mouse();
Doorman d1 = new Doorman();
Cat c1 = new Cat();
// 기존 코드는 놔두면서 어댑터만 추가함
TigerAdapter ta = new TigerAdapter(new OuterTiger());
d1.쫓아내(m1);
d1.쫓아내(c1);
d1.쫓아내(ta);
}
}
Share article