Adapter 패턴에 대해서 많이 들어는 봤지만!

이번 강의를 듣고 확실하게 귀에 콕 박혔다. 

아주 아주 쉽게 설명해주심...

 

말하자면 서로 호환될 수 없는 두 개의 장치가 있다고 가정해보자.

우리집은 110V 만 가능한 데, 친구가 선물해 준 청소기는 220V 콘센트 인 것이 아닌가?

이럴 때 필요한 것이 바로 220V --> 110V 로 바꿔주는 어댑터인 것..

일상의 모든 것을 우리는 객체화 시킬 수 있다. 우리는 디벨롭허이므로..ㅎ 코드를 보자.

 

일단, 각각 110V, 220V 규격대로 interface를 만든다.

110V 를 상속받은 제품은 110V로 개발이 될 것이고 220V를 상속받은 제품은 220V로 개발이 될 것이다.

public interface Electronic110V {
    void powerOn();
}
public interface Electronic220V {
    void connect();
}

 

기존에 내가 산 드라이기는 당연히! 우리집이 110V만 가능하기 때문에 110V 짜리로 샀다.

자, 드라이기 클래스를 생성하자.

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

친구가 선물한 220V 청소기도 클래스로 구현해보자.

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

 

자, 이제 우리집 콘센트를 구현해보자.

우리집은 110V만 꽂을수 있으니 110V 콘센트 준비

public class Main {

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

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

}

 


public class Main {

    public static void main(String[] args) {
		
        //내가 산 110V 드라이기 연결~ 잘된다.
        HairDryer hairDryer = new HairDryer();
        connect(hairDryer);

		//친구가 사준 220V 드라이기 연결~ 되겠냐~
        Cleaner cleaner = new Cleaner();
        connect(cleaner); // 이렇게 바로 연결하려고 하면 에러난다.
        
        //그때 필요한 것이 바로 어댑터,,!!
        //그럼 어댑터 클래스를 구현해보자.

    }

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

}

 

110V와 220V를 연결해 줄 어댑터 클래스를 생성한다~

겉으로는 110V 처럼 보이지만(implements) 내부적으로는 220V로 연결되도록!!

public class SocketAdapter implements Electronic110V{
    private Electronic220V electronic220V;

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

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

 

그럼 다시 위의 코드에서 Adapter를 이용해서 연결해보자.

 

 

public class Main {

    public static void main(String[] args) {
    
       	
        //내가 산 110V 드라이기 연결~ 잘된다.
        HairDryer hairDryer = new HairDryer();
        connect(hairDryer);

		//친구가 사준 220V 청소기 연결~ 되겠냐~
        Cleaner cleaner = new Cleaner();
        // connect(cleaner); // 이렇게 바로 연결하려고 하면 에러난다.
        
        //위에서 구현한 110V adapter에 220V 청소기를 넣어서 해당 어댑터를 콘센트에 연결한다!!
        Electronic110V adapter = new SocketAdapter(cleaner);
        connect(adapter);

    }

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

이렇게 한 후 main 을 실행하면, 호환되지 않는 두 개의 객체가 어댑터를 통해 하나의 콘센트를 이용할 수 있게

됬다!

 

뚜뚱

 

헤어드라이기 110V on
청소기 220V on

 

각각의 기능을 변경하지 않고도 중간에 어댑터를 줌으로써 호환될 수 있도록 하는 것을 어댑터 패턴이라고 한다.

메모..

 

 

 

+ Recent posts