라떼군 이야기


8 / 13강

어댑터와 퍼사드: 연결과 단순화

기존 온도 장치는 화씨 값을 반환하지만 새 화면은 섭씨 값을 기대합니다. 장치 코드를 바꿀 수 없다면 중간에 변환 객체를 둘 수 있습니다. 어댑터는 서로 다른 인터페이스를 연결해 함께 작동하게 합니다.

메서드와 단위를 맞춥니다

class LegacySensor:
    def read_fahrenheit(self):
        return 77

class CelsiusAdapter:
    def __init__(self, sensor):
        self.sensor = sensor
    def read_celsius(self):
        return (self.sensor.read_fahrenheit() - 32) * 5 / 9

print(CelsiusAdapter(LegacySensor()).read_celsius())

출력은 25.0입니다. CelsiusAdapter는 화면이 기대하는 read_celsius()를 제공하고, 기존 장치의 값을 변환합니다. 단순히 메서드 이름만 바꾸는 것이 아니라 단위처럼 의미의 차이도 맞춥니다.

퍼사드는 입구를 줄입니다

보고서를 보내려면 자료 읽기, 형식 변환, 저장, 전송을 순서대로 해야 한다고 합시다. 퍼사드는 이 여러 호출을 send_report() 같은 간단한 입구로 묶습니다. 아래 기능들은 그대로 존재하고, 필요한 사용자는 직접 접근할 수도 있습니다.

패턴주된 질문
어댑터기대하는 인터페이스와 어떻게 맞출까?화씨 장치를 섭씨 인터페이스로 연결
퍼사드복잡한 절차를 어떻게 쉽게 사용할까?여러 보고서 처리 단계를 한 호출로 제공

하나의 객체가 두 역할을 일부 수행할 수도 있지만, 설계 이유를 구분하면 책임이 지나치게 커지는 것을 막는 데 도움이 됩니다.

확인 문제

라이브러리가 바뀌어 함수 이름과 반환 형식이 달라졌습니다. 기존 호출 코드를 유지하려면 어떤 역할이 필요할까요?

해설 보기

기존 코드가 기대하는 호출과 결과로 변환하는 어댑터가 어울립니다. 오류의 종류나 비동기 처리 방식까지 바뀌었다면 그 차이도 계약에 맞춰 처리해야 합니다.

제품 기획, 개발 파트너 찾으시나요? 개인, 팀, 기업 모두 환영. 문제 정의부터 출시까지 함께합니다.