1. 정의
- 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 타깃을 구현하여 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 한다.
2. 예시
- 어댑터를 사용하여 오리에게 “꽥”소리가 아닌 “골골”소리를 내게 한다.
3. 그림

4. 클래스 다이어그램

5. 코드
public class Client {
public static void main(String[] args){
Duck mallard = new MallardDuck();
mallard.quack();
Turkey turkey = new WildTurkey();
Duck duck = new TurkeyAdapter(turkey);
duck.quack();
}
}
/* 출력
꽥
골골
*/
public interface Duck {
void quack();
}
public interface Turkey {
void gobble();
}
public class MallardDuck implements Duck{
@Override
public void quack() {
System.out.println("꽥");
}
}
public class WildTurkey implements Turkey{
@Override
public void gobble() {
System.out.println("골골");
}
}
// 타깃 구현
public class TurkeyAdapter implements Duck{
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
// 요청 변환
@Override
public void quack() {
turkey.gobble();
}
}
https://github.com/kang-seongbeom/design_pattern
💡 Github에서 디자인 패턴 코드를 볼 수 있습니다.
6. 설명
- Client는 오리밖에 못썼지만, 어댑터를 통해 칠면조까지 쓸 수 있게 되었다.
- TurckeyAdapter는 타깃인 Duck을 구현한다.
- Client는 타깃 인터페이스인 Duck의 quack()을 요청한다.
- TurkeyAdapter는 요청을 gobble()로 요청을 변환한다.
- 결국, Client는 Duck 참조변수로 어댑터만 주입받으면 어댑터의 존재를 모를 수 있는 구조다.
'디자인 패턴' 카테고리의 다른 글
디자인 패턴 - 템플릿 메소드 패턴(Template Method Pattern) (0) | 2022.11.17 |
---|---|
디자인 패턴 - 퍼사드 패턴(Facade Pattern) (0) | 2022.11.17 |
디자인 패턴 - 커맨드 패턴(Command Pattern) (0) | 2022.11.17 |
디자인 패턴 - 싱글톤 패턴(Singleton Pattern) (0) | 2022.11.17 |
디자인 패턴 - 팩토리 메소드 패턴(Factory Method Pattern) (0) | 2022.11.17 |