11장 : 프록시 패턴
Refactoring Guru Code & Diagram
프록시 패턴의 정의
어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴
프록시 패턴을 이용하면 원격 객체라든가 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 댇체에 대한 접근을 제어하는 대변자 객체를 만들 수 있다.
원격 프록시 vs 가상 프록시
원격 프록시
원격 프록시는 다른 JVM에 들어있는 객체의 대변인에 해당하는 로컬 객체이다. 프록시의 메소드를 호출하면 그 호출이 네트워크를 통해서 전달되어 결국 원격 객체의 메소드가 호출된다. 그리고 그 결과는 다시 프록시를 거쳐서 클라이언트한테 전달된다.
가상 프록시
가상 프록시는 생성하는 데 많은 비용이 드는 객체를 대신하는 역할을 맡았다. 실제로 진짜 객체가 필요하게 되기 전까지 객체의 생성을 미루게 해주는 기능을 제공한다. 객체 생성 전, 또는 객체 생성 도중에 객체를 대신하기도 한다. 객체 생성이 완료되고 나면 그냥 RealSubject에 요청을 직접 전달해준다.
복습
데코레이터 : 다른 객체를 감싸서 새로운 행동을 추가해 준다.
퍼사드 : 여러 객체를 감싸서 인터페이스를 단순화시킨다.
프록시 : 다른 객체를 감싸서 접근을 제어한다.
어댑터 : 다른 객체를 감싸서 다른 인터페이스를 제공한다.
핵심 정리
프록시 패턴을 이용하면 어떤 객체에 대한 대변인을 내세워서 클라이언트의 접근을 제어할 수 있다. 접근을 관리하는 방법에는 여러 가지가 있다.
원격 프록시는 클라이언트와 원격 객체 사이의 데이터 전달을 관리해준다.
가상 프록시는 인스턴스를 만드는 데 많은 비용이 드는 객체에 대한 접근을 제어한다.
보호 프록시는 호출하는 쪽의 권한에 따라서 객체에 있는 메소드에 대한 접근을 제어한다.
그 외에도 캐싱 프록시, 동기화 프록시, 방화벽 프록시, 지연 복사 프록시와 같이 다양한 변형된 프록시 패턴이 있다.
프록시 패턴의 구조는 데코레이터 패턴의 구조하고 비슷하지만 그 용도가 다르다는 차이점이 있다.
데코레이터 패턴에서는 객체에 행동을 추가하지만 프록시 패턴에서는 접근을 제어한다.
자바에 내장된 프록시 지원 기능을 이용하면 동적 프록시 클래스를 즉석에서 만들어서 원하는 핸들러에서 호출을 처리하도록 할 수 있다.
다른 래퍼를 쓸 때와 마찬가지로 프록시를 쓰면 디자인에 포함되는 클래스와 객체의 수가 늘어난다.
Last updated