프로그래밍/GoF

[구조 패턴] - 프록시 (Proxy)

MAKGA 2022. 1. 12. 00:30
320x100

구조

#pragma once

#include <iostream>

class Subject
{
public:
    virtual void request() = 0;
};

class RealSubject : public Subject
{
    void request() override
    {
        std::cout << "Real Subject" << std::endl;
    }
};

class ProxySubject : public Subject
{
public:
    ProxySubject(Subject* subject)
    {
        realSubject = subject;
    }

    void request()
    {
        realSubject->request();
    }

private:
    Subject* realSubject;
};

 

사용

int main()
{
    Subject* subject = new RealSubject;
    ProxySubject* proxy = new ProxySubject(subject);
    proxy->request();

    return 0;
}

 

프록시 객체는 웨이터와 같이 클라이언트와 객체 사이의 중개를 담당한다. 클라이언트로부터의 요청을 대신 받고, 이를 실제 객체에게 전달한다. 그러므로 프록시는 클라이언트에게 실제 객체와 동일한 인터페이스를 제공하나, 실제 객체에 대한 정보를 클라이언으로부터 은닉시킨다. 또한 프록시에 별도의 로직을 추가함으로써 실제 객체의 흐름을 제어할수도 있다.

320x100