본문 바로가기

용어정리/#디자인패턴

용어정리-[#디자인패턴] 2.Proxy Pattern

[ Proxy Pattern ]

프록시 패턴


2018 - 06 - 01


프록시는 대리자, 대변인이라는 뜻을 가진 단어다.


코드를 통해 프록시 패턴의 구성을 살펴보자


IService.java

1
2
3
4
5
package proxyPattern;
 
public interface IService {
    String runSomething();
}
cs


IService 인터페이스를 구현한 Service.java

1
2
3
4
5
6
package proxyPattern;
 
public class Service implements IService {
    public String runSomething (){
        return "서비스 짱!!";
}
cs



IService 인터페이스를 구현한 Proxy.java

1
2
3
4
5
6
7
8
9
10
11
12
package proxyPattern;
 
public class Proxy implements IService {
    IService service1;
 
    public String runSomething (){
        System.out.println("호출에 대한 흐름 제어가 주목적, 반환 결과를 그대로 전환");
 
        Service1 = new Service();
        return service1.runSomething();
    }
}

cs


프록시를 사용하는 ClientWithProxy.java
1
2
3
4
5
6
7
8
9
package proxyPattern;
 
public class ClientWithProxy {
    public static void main(String[] args){
        // 프록시를 이용한 호출
        IService proxy = new Proxy();
        System.out.println(proxy.runSomething());
    }
}
cs

IService는 인터페이스다. 

ClientWithProxy에서 IService를 상속한 Proxy를 호출하면 Proxy는 작성된 코드 대로 IService의 String 값을 return해주고 그 값을 받은 Proxy는 다시 한번 ClientWithProxy로 return 해준다.


프록시 패턴의 중요 포인트를 짚어 보자.

  • 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스를 사용한다.

  • 대리자는 실제 서비스에 대한 참조 변수를 갖는다(합성).

  • 대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다.

  • 대리자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 


여기서 대리자/대변인의 이름에 주목 해 보자. 청와대 대변인, 백악관 대변인은 해당 기관의 입장을 대변할 뿐 그 입장에 자신의 입장을 가감하지 않는다. 프록시 패턴이 실제 서비스 메서드의 반환값에 가감하지 않는다는 것이 이름에서 딱 느껴지지 않는가? 프록시 패턴은 실제 서비스 메서드의 반환 값에 가감하는 것을 목적으로 하지 않고 제어의 흐름을 변경하거나 다른 로직을 수행하기 위해 사용한다. 프록시 패턴을 한 문장으로 정리해 보자.


"제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴"


출처

스프링 입문을 위한 자바 객체 지향의 원리와 이해

김종민 지음