어댑터(Adapter)는 클라이언트로부터 요청을 받아서 업체에서 제공하는 클래스에서 받아들일 수 있는 형태의 요청으로 변환시켜주는 중개인 역할을 합니다.
레퍼런스 코드를 확인해보면 클라이언트에서 Turkey
를 기존에 제공하는 클래스인 Duck
으로 변환시켜주기 위해 TurkeyAdapter
코드를 추가하였습니다.
TurkeyAdapter.java
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
for(int i = 0; i < 5; i++) {
turkey.fly();
}
}
}
다이어그램으로 살펴보면 아래와 같습니다.
Duck
인터페이스를 가지고 있습니다. 하지만 실제 구현된 구상 클래스는 TurkeyAdapter
입니다. TurkeyAdapter
에서는 Turkey
인터페이스를 가지고 있습니다. 클라이언트로부터 받은 요청을 Turkey
인터페이스에 대한 메소드로 변환합니다.TurkeyAdapter
에서 무엇을 하는지 모른 채로 호출 결과를 받습니다. (https://images.velog.io/images/ye-geeee/post/d22c6f80-0836-43c2-9657-38c685d8d8b2/Adapter.png)
어댑터 패턴(Adapter Pattern)
한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다.