Proxy Pattern 이란?

  • 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴
  • 연결 이외에 다른 요청에 대해 관여할 수 없다.
  • 주로 네트워크 연결, 메모리의 대용량 객체로의 접근 등에 이용한다.

  • Subject : Proxy와 RealSubject가 구현해야 하는 인터페이스, Client의 요청을 나눠 처리하기 위함
  • Proxy : 간단한 요청을 처리해주는 객체, 요청이 복잡할 경우 내부 RealSubject 객체에게 요청 위임
  • RealSubject : 복잡한 요청을 처리해주는 객체, Client는 Proxy를 통해 접근

프록시 패턴 적용

Subject - Proxy와 RealSubject가 구현해야 하는 인터페이스

package StructuralPatterns.Proxy;

public interface Subject {
    //간단요청
    public void doAction1();
    //복잡요청
    public void doAction2();
}

Proxy - 간단한 요청을 처리해주는 객체, 요청이 복잡할 경우 내부 RealSubject 객체에게 요청 위임

package StructuralPatterns.Proxy;

public class Proxy implements Subject{
    private Subject real;
    
    public Proxy(Subject real) {
        this.real = real;
    }

    @Override
    public void doAction1() {
        System.out.println("간단 업무 처리 by Proxy");
    }

    @Override
    public void doAction2() {
        //복잡 요청은 RealSubject에게 위임
        real.doAction2();
    }
}

RealSubject - 복잡한 요청을 처리해주는 객체, Client는 Proxy를 통해 접근

package StructuralPatterns.Proxy;

public class RealSubject implements Subject{
    @Override
    public void doAction1() {
        System.out.println("간단 업무처리 by Real");
    }

    @Override
    public void doAction2() {
        System.out.println("복잡 업무처리 by Real");
    }
}

Client & 실행결과

package StructuralPatterns.Proxy;

public class Client {
    public static void main(String[] args) {
        Subject proxy = new Proxy(new RealSubject());
        proxy.doAction1();
        proxy.doAction2();
    }
}


참고

https://sorjfkrh5078.tistory.com/category/IT%20%EA%B0%9C%EC%9D%B8%20%EA%B3%B5%EB%B6%80/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4

+ Recent posts