Back-end/JavaSpringBoot

Adapter pattern

본투비곰손 2022. 8. 1. 23:18
728x90

110v 200v 변환기를 예로 들 수 있다.

호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 한다.

개방폐쇄 원칙을 사용한다.

Client
 

             ↓

Interface Target
Method

            ↑

Adapter            → Adaptee
Method concreteMethod

110V 인터페이스를 생성

package com.company.design.adapter;

public interface Electronic110V {
    void powerOn();
}

220V 인터페이스를 생성

package com.company.design.adapter;

public interface Electronic220V {
    void connect();
}

110V를 사용하는 객체 HairDryer

package com.company.design.adapter;

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

220V를사용하는 객체 Airconditioner

package com.company.design.adapter;

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

110V 만 연결되는 상황으로 각각 연결 해보면 Airconditioner의 경우 오류가 발생 한다.

package com.company.design;

import com.company.design.adapter.*;

public class main {
    public static void main(String[] args) {


        HairDryer hairDryer = new HairDryer();
        connect(hairDryer);

        Airconditioner airconditioner = new Airconditioner();
        connect(airconditioner);  // 연결하게 되면 오류 발생 220V를 상속 받았기때문
    }

    // 콘센트
    public static void connect(Electronic110V electronic110V){ // main이 static 이기 때문에 static이어야 한다.
        electronic110V.powerOn();
    } // 현재 집에는 110V 만을 사용해서 전원을 연결하고 있다.

}

변환해줄 수 있는 adapter을 만들어준다.

package com.company.design.adapter;

public class SocketAdapter implements Electronic110V{ // 110V를 상속하고 

    private Electronic220V electronic220V; // 220V를 스스로 가지는 adapter객체를 생성한다.

    public SocketAdapter(Electronic220V electronic220V){
        this.electronic220V = electronic220V; // 220V로 연결하게 생성해준다.
    }
    @Override
    public void powerOn() {
        electronic220V.connect(); 
        // adapter를 통해 110V 로 연결하게 되면 220V으로 변환되게 재정의 해준다.
    }
}

다시 main으로 돌아와서

package com.company.design;

import com.company.design.adapter.*;

public class main {
    public static void main(String[] args) {


        HairDryer hairDryer = new HairDryer();
        connect(hairDryer);

        Airconditioner airconditioner = new Airconditioner();
        Electronic110V airadapter = new SocketAdapter(airconditioner);
        connect(airadapter);  // SocketAdapter를 사용하여 110V를 
        //220V로 변환 연결하는 airadapter를 만들고 airadapterf를 통해서 연결한다.
    }

    // 콘센트
    public static void connect(Electronic110V electronic110V){ // main이 static 이기 때문에 static이어야 한다.
        electronic110V.powerOn();
    } // 현재 집에는 110V 만을 사용해서 전원을 연결하고 있다.

}

정상적으로 연결되었다는 메세지가 출력 된다.

728x90