
객체지향 어댑터(Adapter)
어댑터(Adapter)는 클라이언트로부터 요청을 받아서 업체에서 제공하는 클래스에서 받아들일 수 있는 형태의 요청으로 변환시켜주는 중개인 역할을 합니다.
어댑터 패턴(Adapter Pattern) 예시
레퍼런스 코드를 확인해보면 클라이언트에서 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();
}
}
}
다이어그램으로 살펴보면 아래와 같습니다.
- 클라이언트(Client)에서는
Duck
인터페이스를 가지고 있습니다. 하지만 실제 구현된 구상 클래스는TurkeyAdapter
입니다. TurkeyAdapter
에서는Turkey
인터페이스를 가지고 있습니다. 클라이언트로부터 받은 요청을Turkey
인터페이스에 대한 메소드로 변환합니다.- 클라이언트에서는
TurkeyAdapter
에서 무엇을 하는지 모른 채로 호출 결과를 받습니다.
어댑터 패턴(Adapter Pattern) 정의
- 클라이언트(Client)에서 타겟(Target) 인터페이스 메소드를 호출함으로써 어댑터(Adapter)에 요청합니다.
- 어댑터에서는 어댑티(Adaptee) 인터페이스를 사용하여 그 요청을 어댑티에 대한 (하나 이상의) 메소드 호출로 변환합니다.
- 클라이언트에서는 호출 결과를 받긴 하지만 중간에 어댑터가 껴 있는지는 전혀 알지 못합니다.
어댑터 패턴(Adapter Pattern)
한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다.
반응형
'Design Patterns' 카테고리의 다른 글
Head First Design Patterns 11. Composite Pattern (0) | 2022.03.13 |
---|---|
Head First Design Patterns 10. Iterator Pattern (0) | 2022.03.12 |
Head First Design Patterns 8. Template Method Pattern (0) | 2022.02.27 |
Head First Design Patterns 7. Facade Pattern (0) | 2022.02.26 |
Head First Design Patterns 6. Command Pattern (0) | 2022.02.25 |