Skip to main content

[Design Pattern] 구조 패턴 4. 프록시 (Proxy)




프록시 (Proxy) #

프록시

  • 다른 객체에 대한 접근을 제어(보호)하기 위한 대리자 역할을 수행한다.
  • 하지만 Adapter와 달리 인터페이스를 변경하지는 않고 동일한 인터페이스를 제공한다. (책임은 없다)



개념적인 예시 #

// 프록시와 원래 객체는 둘 다 같은 인터페이스를 사용한다. 
public interface ISubject
{
    void Request();
}

// 원래 객체 
class RealSubject : ISubject
{
    public void Request()
    {
        Console.WriteLine("RealSubject: Handling Request.");
    }
}

// 프록시 
class Proxy : ISubject
{
    private RealSubject _realSubject;
    
    public Proxy(RealSubject realSubject)
    {
        this._realSubject = realSubject;
    }
    
    public void Request()
    {
        // 접근을 제어한다. 
        if (this.CheckAccess())
        {
            this._realSubject.Request();

            this.LogAccess();
        }
    }
    
    public bool CheckAccess()
    {
        Console.WriteLine("Proxy: Checking access prior to firing a real request.");

        return true;
    }
    
    public void LogAccess()
    {
        Console.WriteLine("Proxy: Logging the time of request.");
    }
}

public class Client
{
    public void ClientCode(ISubject subject)
    {
        // ...
        
        subject.Request();
        
        // ...
    }
}

class Program
{
    static void Main(string[] args)
    {
        Client client = new Client();
        
        // 원래 객체
        RealSubject realSubject = new RealSubject();
        client.ClientCode(realSubject);

        // 프록시 
        Proxy proxy = new Proxy(realSubject);
        client.ClientCode(proxy);
    }
}



References #