// 1. 기존 클래스 (220V 콘센트)
class KoreanSocket {
public void provide220V() {
System.out.println("220V 전원이 공급됩니다.");
}
}
// 2. 새로운 인터페이스 (110V 플러그)
interface USPlug {
void supply110V();
}
// 3. 어댑터 클래스 (220V → 110V 변환)
class VoltageAdapter implements USPlug {
private KoreanSocket koreanSocket;
public VoltageAdapter(KoreanSocket koreanSocket) {
this.koreanSocket = koreanSocket;
}
@Override
public void supply110V() {
koreanSocket.provide220V();
System.out.println("어댑터를 통해 110V 전원으로 변환되었습니다.");
}
}
// 4. 사용 예
public class Main {
public static void main(String[] args) {
KoreanSocket socket = new KoreanSocket();
USPlug adapter = new VoltageAdapter(socket);
adapter.supply110V();
}
}
어댑터 패턴은 호환되지 않는 인터페이스를 가진 클래스를 연결할 때 사용하는 디자인 패턴입니다. • 기존 클래스를 수정하지 않고 새로운 인터페이스에 맞게 변환할 수 있습니다. • 라이브러리, 레거시 코드, 외부 API 등을 통합할 때 유용합니다.
✅ 장점 • 기존 코드를 수정하지 않고도 새로운 인터페이스와 호환 가능 • 레거시 코드 또는 외부 API와의 통합이 용이
❌ 단점 • 클래스 구조가 복잡해질 수 있으며, 너무 많이 사용하면 유지보수가 어려워질 수 있음 • 성능이 중요한 경우, 변환 과정이 추가 오버헤드를 발생할 수 있음