아무거나

[Design Pattern] Proxy Pattern 본문

Java & Kotlin/Java

[Design Pattern] Proxy Pattern

전봉근 2020. 1. 12. 13:17
반응형

프록시 패턴(Proxy Pattern)

프록시 패턴은 쉽게 말해서 대리인이라고 생각하면되고, 작업을 나누어서 구현할 수 있다. 일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다. 프록시는 어떠한 것과도 인터페이스의 역할을 수행할 수 있다. 즉, 프록시는 결과값을 조작하거나 변경하면 안된다.

 

 

Client 요청을 proxy가 처리하고, proxy가 처리하지 못한곳은 실제 업무를 처리하는곳에서(=RealSubject) 처리하면 된다.

프록시 패턴 예시 - 1

먼저 Subject 인터페이스를 생성한다.
[Subject.java]

package com.bkjeon.proxy;

public interface Subject {

    // 리소스가 적게 드는 일
    void action1();
    // 리소스가 많이 드는 일 (네트워크, 메모리가 많이 사용)
    void action2();

}

업무를 처리할 Proxy 클래스를 구현한다.
[Proxy.java]

package com.bkjeon.proxy;

public class Proxy implements Subject {

    private Subject real;

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

    @Override
    public void action1() {
        System.out.println("간단한 업무 by 프록시");
    }

    @Override
    public void action2() {
        this.real.action2();
    }
}

실제 업무를 처리할 RealSubject 클래스를 구현한다.
[RealSubject.java]

package com.bkjeon.proxy;

public class RealSubject implements Subject {
    @Override
    public void action1() {
        System.out.println("간단한 업무 by 실제");
    }

    @Override
    public void action2() {
        System.out.println("복잡한 업무 by 실제");
    }
}

메인 클래스를 구현한다.
[Main.java]

package com.bkjeon.proxy;

public class Main {

    public static void main(String[] args) {
        Subject real = new RealSubject();

        Subject proxy1 = new Proxy(real);
        Subject proxy2 = new Proxy(real);

        proxy1.action1();
        proxy2.action1();

        proxy1.action2();
        proxy2.action2();
    }

}

결과

간단한 업무 by 프록시
간단한 업무 by 프록시
복잡한 업무 by 실제
복잡한 업무 by 실제

 

 

참고: https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard

반응형

'Java & Kotlin > Java' 카테고리의 다른 글

조합(=combination) 구하기  (0) 2020.05.16
[Design Pattern] Command Pattern  (0) 2020.01.12
[Design Pattern] Flyweight Pattern  (0) 2020.01.12
[Design Pattern] Memento Pattern  (0) 2020.01.12
[Design Pattern] State Pattern  (0) 2020.01.10
Comments