[디자인패턴] 어댑터 패턴(Adapter Pattern)

Damsul·2023년 1월 9일
0

디자인패턴

목록 보기
1/15

인터페이스가 서로 맞지 않을 때 함께 동작하고자 연결시키는 구조패턴

출처 : 위키디피아

  • Client : Target을 사용하는 주체
  • Target : 기준이 되는 클래스
  • Adaptee : 변환되는 클래스
  • Adaptor : Adaptee를 Target으로 변환시켜주는 클래스

예제

디바이스 : 안드로이드폰, 아이폰
케이블 : C-Type, Lightning
충전기 : C-Type Portable Charger
가 있다고 가정해보자.
안드로이드폰은 C-Type 케이블과 연결해서 충전기를 사용할 수 있지만 아이폰은 Lightning 케이블을 C-Type으로 변환시키고 연결해야지만 충전할 수 있다. 어댑터 패던을 이용해 어댑티를 타겟으로 변환시키는 어댑터를 구현한다.

  • Target
public interface CTypeCable {
    public String getCTypeConnectDeviceName();
}
  • Adaptee
public interface LightningCable {
    public String getLightningConnectDeviceName();
}
  • Adaptor
public class LightningToCTypeAdaptor implements CTypeCable {
    private final LightningCable lightningCable;
    
    public LightningToCTypeAdaptor(LightningCable lightningCable) {
        this.lightningCable = lightningCable;
    }

    @Override
    public String getCTypeConnectDeviceName() {
        return lightningCable.getLightningConnectDeviceName();
    }
}
  • Client
public class Main {
    public static void main(String[] args) {

        Android android = new Android();
        Iphone iphone = new Iphone();

        CTypePortableCharger cTypePortableCharger = new CTypePortableCharger();
        cTypePortableCharger.charging(android);
        cTypePortableCharger.charging(new LightningToCTypeAdaptor(iphone));
    }
}
  • 결과

장단점

  • 장점
    - 기존 코드를 변경하지 않아도 된다.
    - 클래스 재활용성을 증가시킬 수 있다.

  • 단점
    - 코드 양이 늘어난다.
    - 복잡도가 증가할 수 있다.
    - 속도가 저하될 수 있다.

profile
내 맘대로 작성하는 개발일지/ 작고 소중한 개발창고

0개의 댓글