어댑터 패턴(Adapter pattern)

박민주·2024년 1월 3일
0

구조패턴의 한 종류인 어댑터 패턴에 대해 알아보자.

Adapter Pattern

apater는 실생활에서 110v를 220v롤 변환해주는 돼지코를 예를 들 수 있다. 호환성이 없는 기존 클래스의 인터페이스를 변경해서 재사용 할 수 있도록 한다. SOLID의 개방폐쇄 원칙을 따른다.

  • 실생활에서도 쉽게 볼 수 있는 패턴이다.
  • 호환되지 않는 인터페이스를 가진 객체들이 협업 할 수 있도록 도와주는는 구조적 패턴이다.
  • 클라이언트가 사용하는 인터페이스를 따르지 않는 레거시 코드를 재사용 할수 있게 해준다.

  • ' Target ' 은 변화에 대한 요구사항이다
  • ' Adaptee '는 기존의 코드이다.
  • ' Adapter '는 변화에 대한 요구사항을 구현한 새로운 코드.
  • ' Adaptee '가 가지고 있는 기능을 'Adapter'가 주입받아 'Target'의 method를 구현한다.
  • ' Client '는 인터페이스인 'Target'을 통해 이를 사용할 수 있다.

예제 코드

다음은 220V의 가전기기들을 110V로 사용하기 위한 예제 코드이다.

파일 디렉토리

Electronic220V

public interface Electronic220V {
    void connect();
}

AirConditioner

public class AirConditioner implements Electronic220V {
    @Override
    public void connect() {
        System.out.println("에어컨 220V on");
    }
}

Cleaner

public class Cleaner implements Electronic220V{
    @Override
    public void connect() {
        System.out.println("청소기 220V on");
    }
}

220v로 구현된 Cleaner와 AirConditioner는 'Adaptee' 이다.

Electronic110V

public interface Electronic110V {
    void powerOn();
}

HairDryer

public class HairDryer implements Electronic110V {
    @Override
    public void powerOn() {
        System.out.println("헤어 드라이기 110v on");
    }
}

Electronic110V interface와 110V로 구현된 HairDryer는 Target이다.

SocketAdapter

public class SocketAdapter implements Electronic110V {

    private Electronic220V electronic220V;

    public SocketAdapter(Electronic220V electronic220V){
        this.electronic220V = electronic220V;
    }

    @Override
    public void powerOn() {
        electronic220V.connect();
    }
}

'Adapter'역할을 하는 SocketAdapter

Client

public class Main {
    public static void main(String[] args) {
        HairDryer hairDryer = new HairDryer();
        connect(hairDryer);

        Cleaner cleaner = new Cleaner();
        Electronic110V adapter = new SocketAdapter(cleaner);
        connect(adapter);

        AirConditioner airConditioner = new AirConditioner();
        Electronic110V airAdapter = new SocketAdapter(airConditioner);
        connect(airAdapter);
    }

    //콘센트
    public static void connect(Electronic110V electronic110V){
        electronic110V.powerOn();
    }
}

220V인 AirConditioner와 Cleaner가 110V에서도 작동 되는 것을 확인 할 수 있다.

profile
개발자 되고싶다..

0개의 댓글