1. 개요
Adapter는 말 그대로 일본여행 갈 때 쓰는 돼지코 (110v를 220v로 변경) 같은 변환기 기능을 말한다.
어댑터 패턴은 호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 한다.
SOLID의 개방폐쇄원칙(OCP)를 따른다.
2. 코드
package com.company.design.adapter;
public interface Electronic110V {
void powerOn();
}
우선 110v 클래스를 만든다.
package com.company.design.adapter;
public interface Electronic220V {
void connect();
}
220v 클래스도 만든다.
package com.company.design.adapter;
public class HairDryer implements Electronic110V {
@Override
public void powerOn() {
System.out.println("Hair Dryer 110v on");
}
}
헤어 드라이어는 110v를 상속받고, powerOn()메소드를 사용한다.
package com.company.design.adapter;
public class Cleaner implements Electronic220V {
@Override
public void connect() {
System.out.println("Cleaner 220v on");
}
}
청소기는 220v를 상속받고, connect()메소드를 사용한다.
package com.company.design.adapter;
public class AirConditioner implements Electronic220V {
@Override
public void connect() {
System.out.println("Air Conditioner 220v on");
}
}
에어컨도 220v를 상속받고, connect()메소드를 사용한다.
package com.company.design;
import com.company.design.adapter.Electronic110V;
import com.company.design.adapter.Electronic220V;
public class SocketAdapter implements Electronic110V {
private Electronic220V electronic220V;
public SocketAdapter (Electronic220V electronic220V) {
this.electronic220V = electronic220V;
}
@Override
public void powerOn() {
electronic220V.connect();
}
}
이 소켓 어댑터가 어댑터 패턴의 핵심이다.
Main에 있는 connect()메소드는 110v밖에 들어가지 않고, 220v인 가전제품을 넣으면 에러가 발생한다.
하지만 소켓 어댑터에서 돼지코 마냥 220v를 매개변수로 받으면 그걸 실행할 수 있도록 powerOn()메소드를
오버라이딩 한다.
package com.company.design.adapter;
import com.company.design.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);
}
// 콘센트, 110v만 받아서 실행 가능
public static void connect(Electronic110V electronic110V){
electronic110V.powerOn();
// 메인 자체가 static이어서 이것도 static이어야 한다.
}
}
결과, 헤어 드라이기처럼 바로 connect로 사용하진 못하지만, 소켓 어댑터에 넣는 것으로 110v마냥
connect()메소드를 사용할 수 있게 됐다.
소켓 어댑터에 220v 제품을 집어넣는 과정이 돼지코를 끼우는 과정이라 생각하면 된다.
이렇게 호환성이 생기면 코드의 재사용성이 좋아진다.
'자바' 카테고리의 다른 글
디자인 패턴 4. 데코레이터 패턴 (Decorator Pattern) (0) | 2022.03.12 |
---|---|
디자인 패턴 3. 프록시 패턴 (Proxy Pattern), AOP (0) | 2022.03.12 |
디자인 패턴 1. 싱글톤 패턴 (Singleton Pattern) (0) | 2022.03.10 |
디자인 패턴 (0) | 2022.03.10 |
객체지향 4. POJO JAVA, 마무리하며 (0) | 2022.03.10 |
댓글