Proxy

Proxy ํŒจํ„ด์€ ํด๋ผ์ด์–ธํŠธ์™€ ์‹ค์ œ ๊ฐ์ฒด(Real Subject) ์‚ฌ์ด์— ๋Œ€๋ฆฌ์ž(Proxy)๋ฅผ ๋‘์–ด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ์‹ค์ œ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  Proxy๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋„๋ก ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ”‚ Client  โ”‚
       โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
            โ”‚
            โ–ผ
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚    Proxy       โ”‚
    โ”‚ (๋ถ€๊ฐ€ ๊ธฐ๋Šฅ ์ ์šฉ)โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚    โ”‚
         โ”‚    โ”‚ ์œ„์ž„ (Delegation)
         โ–ผ    โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ Real    โ”‚  โ”‚ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ  โ”‚
  โ”‚ Subject โ”‚  โ”‚ (๋กœ๊น…, ์บ์‹ฑ ๋“ฑ) โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

์ด๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ์ œ์–ด๋‚˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ(๋กœ๊น…, ์บ์‹ฑ, ๊ถŒํ•œ ๊ฒ€์‚ฌ ๋“ฑ)์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


How do code

// Specification: Proxy ํŒจํ„ด์€ ์‹ค์ œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

// Service ์ธํ„ฐํŽ˜์ด์Šค
public interface Service {
    String operation();
}

// ์‹ค์ œ ๊ฐ์ฒด (Real Subject)
public class RealService implements Service {
    @Override
    public String operation() {
        return "์‹ค์ œ ์„œ๋น„์Šค์˜ ๋™์ž‘ ๊ฒฐ๊ณผ";
    }
}

// Proxy ๊ฐ์ฒด
public class ServiceProxy implements Service {
    private Service realService;

    public ServiceProxy() {
        // ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค.
        this.realService = new RealService();
    }

    @Override
    public String operation() {
        // ํ˜ธ์ถœ ์ „ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ (์˜ˆ: ๋กœ๊น…)
        System.out.println("Proxy: operation() ํ˜ธ์ถœ ์ „");

        // ์‹ค์ œ ๊ฐ์ฒด์— ์œ„์ž„
        String result = realService.operation();

        // ํ˜ธ์ถœ ํ›„ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ (์˜ˆ: ๊ฒฐ๊ณผ ์บ์‹ฑ)
        System.out.println("Proxy: operation() ํ˜ธ์ถœ ํ›„");

        return result;
    }
}

์ด์™€ ๊ฐ™์ด Proxy ํŒจํ„ด์€ ํด๋ผ์ด์–ธํŠธ์™€ ์‹ค์ œ ๊ฐ์ฒด ์‚ฌ์ด์—์„œ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ(์˜ˆ: ๋กœ๊น…, ์บ์‹ฑ, ๋ณด์•ˆ ๊ฒ€์‚ฌ ๋“ฑ)์„ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

Last updated