프로그램 아키텍쳐/디자인패턴

프록시 패턴 ( Proxy Pattern )

본클라쓰 2009. 10. 30. 13:29

 

 프록시는 대리 객체를 말한다. 어떤 작업을 하는 클래스가 있다고 가정하면 그 클래스 안에는 처리과정이 복잡하고 시스템의 리소스를 많이 잡아 먹는 메소드도 있고, 간단하게 처리할 수 있는 메소드도 있을 것이다. 이때 대리 클래스를 두어 간단한 처리는 대리가 처리하고 복잡하고 리소스를 많이 잡아 먹는 처리를 할 경우에만 실제 클래스를 생성하여 처리하는 방법을 제공한다.


 프록시 패턴은 접근 제한을 둘 수도 있기 때문에 원격 컨트롤 프로그램 작성시에도 유용하다.  프록시 패턴은 다음과 같은 클래스 다이어그램을 가지고 있다.

 











 


 


 

 

 

 

 

 

 

 서비스 인터페이스를 구현한 실제 클래스를 두고 프록시 클래스를 따로 작성하여 간단한 일은 프록시 클래스가 처리하고 복잡하고 무거운 일은 실제클래스를 생성하여 실제 클래스로 처리하는 방법을 제공한다.

 

프록시 패턴의 적용 영역

  1. Remote Proxy : 원격 객체에 대한 로컬의 대리자(Local representative)
  2. Virtual Proxy : 많은 비용이 요구되는 객체를 생성하는 경우
  3. Protection Proxy : 보호가 요구되는 객체에 대한 접근을 통제하고 대리자를 통해 접근 가능한 정도만 노출
  4. Smart Reference : 단순한 접근 이외의 부가적인 작업을 수행할 필요가 있을 경우

 

인터페이스 서비스 클래스

public interface 서비스 {


    public void 간단한일();


    public void 중요한일();


}



실제클래스

public class 실제클래스 implements 서비스 {


    public void 간단한일() {

        간단한일 구현

    }


    public void 중요한일() {

        중요한일 구현

    }
}



프록시클래스

public class 프록시 implements 서비스 {


    private 서비스 객체;


    public void 간단한일() {

        간단한일 구현

    }


    public void 중요한일() {


        this.객체 = (서비스)Class.forName("실제클래스").newInstance();

        객체.중요한일();

    }


}


 

실제 사용 코드

main {

    서비스 객체 = new 프록시();


    객체.간단한일();

    객체.중요한일();

}


 프록시 클래스를 생성하여 간단한 일을 처리할 경우에는 실제 객체를 생성하지 않지만 중요한일을 처리할 경우에는 실제클래스 객체를 생성하여 작업을 처리하는 방법이다.