Adapter 패턴과 Facade 패턴은 모두 기존 시스템이나 라이브러리와의 상호작용을 돕는 구조 패턴입니다. 두 패턴의 목적과 사용 시점을 비교하여 설명하고, 각각의 실질적인 적용 사례를 들어주세요.
힌트 · Adapter는 호환되지 않는 인터페이스를 맞추고, Facade는 복잡한 서브시스템에 대한 단순화된 인터페이스를 제공합니다.
모범답안
Adapter 패턴과 Facade 패턴은 둘 다 기존 시스템과의 연동을 돕지만, 목적과 사용 시점이 다릅니다.
Adapter 패턴은 주로 호환되지 않는 인터페이스를 가진 클래스들을 함께 작동하도록 변환하는 데 사용됩니다. 마치 전압 변환기처럼, 기존의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 바꿔주는 역할을 합니다. 예를 들어, 레거시 시스템의 API가 최신 라이브러리의 요구사항과 맞지 않을 때 Adapter를 사용하여 인터페이스를 맞춰줄 수 있습니다.
Facade 패턴은 복잡한 서브시스템에 대해 단순화된 통합 인터페이스를 제공하는 데 중점을 둡니다. 여러 개의 클래스로 구성된 복잡한 라이브러리나 프레임워크를 사용할 때, Facade는 클라이언트가 이 서브시스템의 복잡성을 알 필요 없이 간단한 메서드 호출로 기능을 사용할 수 있게 해줍니다. 예를 들어, 데이터베이스 연결, 쿼리 실행, 결과 처리 등 여러 단계가 필요한 데이터 접근 로직을 Facade로 묶어 클라이언트에게는 간단한 getData() 메서드만 노출할 수 있습니다.
요약하자면, Adapter는 '인터페이스 변환'에, Facade는 '복잡성 은닉 및 단순화된 인터페이스 제공'에 초점을 맞춘다고 볼 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 디자인 패턴 면접 질문
- 시스템의 특정 동작 방식을 런타임에 유연하게 변경해야 하는 요구사항이 있을 때, Strategy 패턴을 어떻게 적용할 수 있는지 설명하고, 이 패턴이 가져다주는 장점과 단점을 함께 설명해 주세요.
- 비동기적으로 발생하는 이벤트에 대해 여러 컴포넌트가 독립적으로 반응해야 하는 상황에서 Observer 패턴을 적용할 수 있습니다. 이 패턴의 동작 원리를 설명하고, Push 모델과 Pull 모델의 차이점 및 각각의 장단점을 비교해 주세요.
- 기존 객체의 기능을 변경하지 않고 동적으로 새로운 기능을 추가해야 할 때 Decorator 패턴을 활용할 수 있습니다. 상속 대신 Decorator 패턴을 사용하는 이유와, 언제 이 패턴을 적용하는 것이 효과적인지 설명해 주세요.
- Proxy 패턴은 실제 객체에 대한 접근을 제어하거나 기능을 추가할 목적으로 사용됩니다. Proxy 패턴의 동작 원리를 설명하고, Virtual Proxy, Remote Proxy, Protective Proxy의 차이점을 구체적인 예시와 함께 설명해 주세요.
- Decorator 패턴과 Proxy 패턴은 구조적으로 유사해 보이지만, 목적과 적용 방식에서 명확한 차이가 있습니다. 복잡한 시스템에서 특정 객체에 대한 횡단 관심사(cross-cutting concerns)를 적용하거나 접근 제어를 구현해야 할 때, 두 패턴 중 어떤 것을 선택해야 하며, 각각의 성능 및 유지보수 측면에서의 장단점은 무엇인지 구체적인 시나리오를 들어 설명해주세요.
- 이벤트 기반 아키텍처에서 Observer 패턴과 Publish-Subscribe 패턴은 모두 느슨한 결합을 통해 객체 간의 통신을 구현하는 데 사용됩니다. 하지만 이 둘은 아키텍처적 차이와 확장성, 그리고 구현 복잡성에서 중요한 차이를 가집니다. 대규모 분산 시스템에서 이 두 패턴 중 어느 것을 선택해야 하며, 그 선택이 시스템의 확장성, 성능, 그리고 장애 허용성에 어떤 영향을 미치는지 심층적으로 비교 설명해주세요.