프록시 패턴이란?

 

Proxy = 대리인

 

프록시 패턴이란 A라는 객체에 접근, 제어하기 위해서는 대리인인 proxyA를 통해서만 접근 가능하게 만드는 패턴이다.

A에 사용하는 인터페이스와 동일한 인터페이스를 proxyA가 제공해야 하며 proxyA객체는 A객체의 속성값을 변경시켜서는 안된다.

또한 게으른 초기화 방식을 사용해서 객체를 실제로 사용하기 전까진 객체 생성 및 초기화에 드는 코스트를 발생시키지 않는다.

 

스마트포인터가 프록시 패턴의 대표적인 예시이다.

 

 

 

프록시 패턴의 구조

 

 

Subject는 추상클래스로 인터페이스만 작성한다.

RealSubject는 실제 접근하려는 A클래스이다.

Proxy는 A에 접근하기 위해 사용해야하는 ProxyA클래스이다.

 

 

 

구현 코드 예시

 

#include <iostream>
using namespace std;

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

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

class Proxy : public Subject {
public:
	Proxy() :_realsubject(nullptr) {}
	~Proxy() { if (_realsubject) delete _realsubject; }

	void request() {
		if (!_realsubject)
			_realsubject = new RealSubject;

		_realsubject->request();
	}
private:
	RealSubject* _realsubject;
};

int main() {
	Subject* Proxyptr = new Proxy();
	Proxyptr->request();

	delete Proxyptr;
	return 0;
}

 

 

 

 

 

 

※ 참고 문헌

https://mjdeeplearning.tistory.com/19

https://d-yong.tistory.com/49