본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


DesignPattern

디자인 패턴 3 - Adapter pattern

반응형

Adapter는 실생활에서는 100v 를 220v로 변경하거나 , 그 반대로 해주는 흔히 돼지코 라고 불리는 변환기를 예로 들 수 있다. 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용 할 수 있도록 한다. 

 SOLID중 개방폐쇠 원칙(OCP)을 따른다

 

 

Adapter pattern을 실생활에서 콘센트 어뎁터를 통해  예시를 들어 보려한다. 

 

에어컨(220v), 청소기(220v) , 헤어드라이어(110v) 3가지 가전 제품이 있고 

각각 제품들은 110V와 220V 방식을 구현한다. 

220v를 110v로 변환해주는 SocketAdapter가 있으며 

우리집엔 110v 콘센트 밖에 없는 상황이다. 

 

코드로는 아래와 같다.

 

 

110v와 220v 인터페이스 (인터페이스는 편의상 한군데 적어놨다.)

package com.company.adaptor;

public interface Electronic110V {
    void powerOn();
}


package com.company.adaptor;

public interface Electronic220V {
    void connect();
}

 

 

에어컨 class

 

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

 

청소기 class

 

package com.company.adaptor;

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

 

 

헤어드라이어 class

 

package com.company.adaptor;

public class HairDryer implements Electronic110V{
    @Override
    public void powerOn() {
        System.out.println("충전기 110v on");
    }
}

 

adapter class

 

package com.company.adaptor;

//220v를 110v로 변환해줄 adapter
public class SocketAdapter implements Electronic110V {

    private Electronic220V electronic220V;
    //220v를 받아서
    public SocketAdapter(Electronic220V electronic220V){
        this.electronic220V = electronic220V;
    }
    //110v에서 사용하게 해준다.
    @Override
    public void powerOn() {
        electronic220V.connect();
    }
}

 

위의 SocketAdapter는 Adapter pattern으로 되어있다 

기본적으로 110V를 구현하고 , 생성시에 변환시킬 220v 제품을 갖게되어 powerOn메서드에서

110v 로 사용할 수있게한다.

 

 

main 클래스

 

public class Main {

        //adapter pattern

        //드라이기 110V
        HairDryer hairDryer = new HairDryer();
        //청소기 220v
        Cleaner cleaner = new Cleaner();
        //에어컨 220v
        AirConditioner airConditioner = new AirConditioner();

        connect(hairDryer);
        //청소기는 220v를 구현하기 떄문에 연결되지 않는다.
		//connect(cleaner);
        
        //어뎁터에 청소기를 연결함
        //중간에 자기자신의 상태는 변환시키지 않고 인터페이스 형식을
        //맞추는 형식을 adapter pattern 이라 한다.
        Electronic110V adapter = new SocketAdapter(cleaner);
        //연결이 된다.
        connect(adapter);

        Electronic110V airAdapter = new SocketAdapter(airConditioner);

        connect(airAdapter);

    }

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