호환되지 않는 인터페이스를 가진 클래스들이 함께 동작할 수 있도록 중간에 어댑터 역할을 하는 클래스를 두는 구조적 디자인 패턴입니다. 어댑터는 기존 클래스를 수정하지 않고 다른 인터페이스와 호환되도록 도와주기 때문에 기존 코드에 대한 수정이 필요 없고, 새로운 코드와 쉽게 통합할 수 있습니다.
# Target Interface (클라이언트가 기대하는 인터페이스)
class EuropeSocket:
def plug_in_european_socket(self):
return "Using European socket power."
# Adaptee (기존에 존재하는 호환되지 않는 클래스)
class USAPowerPlug:
def plug_in_usa_socket(self):
return "Using USA socket power."
# Adapter (어댑터 클래스)
class USAToEuropeAdapter(EuropeSocket):
def __init__(self, usa_plug: USAPowerPlug):
self.usa_plug = usa_plug
def plug_in_european_socket(self):
# 호환되지 않는 인터페이스를 맞춰주는 어댑터 메서드
return self.usa_plug.plug_in_usa_socket()
# Client Code (클라이언트 코드)
def charge_device(socket: EuropeSocket):
print(socket.plug_in_european_socket())
# Usage Example
usa_plug = USAPowerPlug()
adapter = USAToEuropeAdapter(usa_plug)
charge_device(adapter)
# Output:
# Using USA socket power.