어댑터 패턴

Lee·2023년 5월 24일
0

디자인 패턴

목록 보기
7/7

어댑터 패턴

  • 서로 다른 인터페이스를 가진 두 클래스를 어댑터 클래스를 통해 인터페이스를 통일시켜 사용하는 디자인 패턴

구현

public abstract class Transportation {
    protected String name;

    public Transportation(String name) {
        this.name = name;
    }

    public abstract void runnable();
}
  • 운송 수단을 추상화한 추상 클래스
  • runnable 메서드를 공통적으로 가진다
public class Bus extends Transportation{
    public Bus(String name) {
        super(name);
    }

    @Override
    public void runnable() {
        System.out.println(name + " running");
    }
}
  • Transportation 클래스를 상속받은 Bus 클래스
public class Airplane {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public String flyable() {
        return  "flyable";
    }
}
  • Transportation 클래스와 호환되지 않는 Airplane 클래스
  • 호환을 시키기 위해 어댑터 패턴 사용
public class Adapter extends Transportation{
    private Airplane airplane;

    public Adapter(String name) {
        super(name);

        airplane = new Airplane();
        airplane.setName(name);
    }

    @Override
    public void runnable() {
        System.out.println(airplane.getName() + " " + airplane.flyable());
    }
}
  • Airplane 클래스가 Transportation 클래스와 호환되도록 하는 어댑터 클래스
  • 어댑터를 통해 runnable 메서드 사용이 가능해진다.

사용 이유

  1. 이미 만들어진 코드를 재사용하는 경우 기존 코드가 수정이 불가한 경우
  2. 새로운 인터페이스가 호환되지 않는 경우

단점

  1. 각 제품 구현체마다 팩토리 객체를 모두 구현해주어야 하기 때문에 서브 클래스 수가 증가
  2. 추상 팩토리의 내부사항 변경 시 모든 팩토리에 대한 수정이 필요하다.

참고
어댑터(Adaptor) 패턴 - 완벽 마스터하기

profile
발전하고 싶은 백엔드 개발자

0개의 댓글