구조패턴의 한 종류인 어댑터 패턴에 대해 알아보자.
apater는 실생활에서 110v를 220v롤 변환해주는 돼지코를 예를 들 수 있다. 호환성이 없는 기존 클래스의 인터페이스를 변경해서 재사용 할 수 있도록 한다. SOLID의 개방폐쇄 원칙을 따른다.
다음은 220V의 가전기기들을 110V로 사용하기 위한 예제 코드이다.
파일 디렉토리
public interface Electronic220V {
void connect();
}
public class AirConditioner implements Electronic220V {
@Override
public void connect() {
System.out.println("에어컨 220V on");
}
}
public class Cleaner implements Electronic220V{
@Override
public void connect() {
System.out.println("청소기 220V on");
}
}
220v로 구현된 Cleaner와 AirConditioner는 'Adaptee' 이다.
public interface Electronic110V {
void powerOn();
}
public class HairDryer implements Electronic110V {
@Override
public void powerOn() {
System.out.println("헤어 드라이기 110v on");
}
}
Electronic110V interface와 110V로 구현된 HairDryer는 Target이다.
public class SocketAdapter implements Electronic110V {
private Electronic220V electronic220V;
public SocketAdapter(Electronic220V electronic220V){
this.electronic220V = electronic220V;
}
@Override
public void powerOn() {
electronic220V.connect();
}
}
'Adapter'역할을 하는 SocketAdapter
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에서도 작동 되는 것을 확인 할 수 있다.