Skip to main content

Proxy Pattern (프록시 패턴)

프록시 패턴이란?

프록시 패턴은 '대리자'라는 뜻을 가진 디자인 패턴으로, 한 객체가 다른 객체의 기능을 대신 수행하는 구조입니다. 이 패턴은 객체에 대한 접근을 제어하거나, 기능을 보완하는 데 사용됩니다. 객체가 할 수 있는 일을 최대한 수행한 후, 그 범위를 넘어서는 일이 필요할 때 실제 객체에게 작업을 위임합니다.

프록시 패턴 쉽게 이해하기

카페에서 커피를 주문할 때를 생각해보세요. 고객이 주문을 하면, 바리스타(프록시)가 주문을 받고 커피를 제공합니다. 여기서 바리스타는 커피를 만드는 기계(실제 객체)를 대신하여 고객과의 상호작용을 담당합니다. 바리스타는 주문을 받고, 필요한 경우 실제 커피 기계를 작동시켜 커피를 제조합니다.

프록시 패턴의 사용 시기

프록시 패턴은 다음과 같은 상황에서 유용합니다:

  • 접근 제어: 특정 객체에 대한 접근을 제어하고 싶을 때 사용합니다. 예를 들어, 민감한 정보를 다루는 객체에 대한 접근을 제한할 수 있습니다.
  • 지연 로딩: 객체의 생성과 초기화에 많은 비용이 들어가는 경우, 실제 사용 시점까지 이를 지연시켜 성능을 최적화할 수 있습니다.
  • 캐싱: 자주 사용되는 객체의 인스턴스를 메모리에 저장하여, 성능을 향상시키고 응답 시간을 줄일 수 있습니다.

프록시 패턴의 장단점

장점

  • 대규모 객체의 생성 시점을 필요할 때까지 지연시켜 메모리 사용을 최적화할 수 있습니다.
  • 프록시는 실제 객체가 준비되지 않았거나 사용할 수 없는 경우에도 클라이언트 요청을 처리할 수 있습니다.
  • 개방 폐쇄 원칙(OCP)을 지킬 수 있어, 기존 코드를 변경하지 않고도 새로운 기능을 추가할 수 있습니다.

단점

  • 프록시 패턴을 도입하면 코드의 복잡성이 증가할 수 있습니다.
  • 실제 객체의 처리를 대신하기 때문에, 때로는 응답 시간이 지연될 수 있습니다.

캐싱에 대한 추가 설명

캐싱은 객체를 재사용하기 위해 메모리나 디스크에 저장하는 과정을 의미합니다. 캐싱의 장점은 시스템의 성능을 향상시키고, 응답 시간을 줄일 수 있다는 것입니다. 그러나 캐싱의 단점으로는 사용하지 않는 데이터가 메모리나 디스크 공간을 차지하여, 자원의 낭비가 될 수 있다는 점을 고려해야 합니다.

예제 코드 보기