패스잇
CS 기초 · 심화

Decorator 패턴과 Proxy 패턴은 구조적으로 유사해 보이지만, 목적과 적용 방식에서 명확한 차이가 있습니다. 복잡한 시스템에서 특정 객체에 대한 횡단 관심사(cross-cutting concerns)를 적용하거나 접근 제어를 구현해야 할 때, 두 패턴 중 어떤 것을 선택해야 하며, 각각의 성능 및 유지보수 측면에서의 장단점은 무엇인지 구체적인 시나리오를 들어 설명해주세요.

힌트 · Decorator는 기능 확장, Proxy는 접근 제어 및 부가 기능 제공에 중점을 둡니다. 성능 및 유지보수 측면에서 런타임 오버헤드, 코드 복잡성, 그리고 책임 분리를 고려해야 합니다.

횡단 관심사데코레이터프록시책임 할당유지보수성

모범답안

Decorator와 Proxy는 구조는 비슷하지만 목적이 다릅니다.

Decorator는 기존 객체의 기능을 런타임에 동적으로 확장할 때 사용합니다. 예를 들어, 로깅이나 트랜잭션 관리 같은 횡단 관심사를 여러 객체에 공통적으로 적용하고 싶을 때, 각 객체에 Decorator를 감싸서 기능을 추가할 수 있습니다. 장점은 코드 중복 없이 기능을 재사용하고, 객체 간의 결합도를 낮춰 유지보수성이 좋다는 것입니다. 단점은 객체 생성이 많아져 런타임 오버헤드가 발생할 수 있다는 점입니다.

Proxy는 객체에 대한 접근을 제어하거나, 객체 생성 및 접근 전에 부가적인 작업을 수행할 때 사용합니다. 예를 들어, 원격 객체에 접근하거나, 민감한 데이터에 대한 접근 권한을 확인하는 경우에 Proxy를 사용할 수 있습니다. 장점은 원본 객체와 클라이언트 사이에 투명하게 작동하며, 접근 제어 로직을 분리하여 핵심 로직에 집중할 수 있다는 것입니다. 단점은 Proxy 객체가 추가되어 복잡성이 증가하고, 경우에 따라 성능 저하가 발생할 수 있습니다.

따라서 횡단 관심사를 기능 확장 관점에서 적용하려면 Decorator를, 접근 제어 또는 부가 기능 제공 관점에서는 Proxy를 선택하는 것이 좋습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 디자인 패턴 면접 질문

← 디자인 패턴 면접 질문 전체 보기