프록시 패턴(Proxy Pattern)은 다른 객체에 대한 접근을 제어하기 위한 대리자 역할을 하는 패턴이다. 주로 객체에 대한 접근을 제어하거나 부가적인 기능을 제공할 때 사용된다. 프록시는 실제 객체와 동일한 인터페이스를 구현하여 클라이언트에게 투명하게 보이며, 필요한 경우에만 실제 객체에 대한 접근을 제공한다.
프록시 패턴의 구성요소
- Subject (주체):
- 프록시와 실제 객체가 구현해야 할 인터페이스 또는 추상 클래스. 클라이언트는 이 인터페이스를 통해 실제 객체에 접근한다.
- RealSubject (실제 주체):
- 프록시가 대리하는 실제 객체. 실제 작업을 수행하는 클래스로, 프록시가 요청을 전달할 실제 대상이다.
- Proxy (프록시):
- 실제 객체에 대한 접근을 제어하고, 부가적인 기능을 제공하는 객체. 클라이언트가 프록시를 통해 실제 객체에 접근하며, 필요한 경우에만 실제 객체를 생성하고 사용한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Proxy1
{
// 1gb짜리라고 가정
// 계속 들고있기 부담스러우니 다 쓰고난뒤 null로 만들어줌
public void Load()
{
}
public void Unload()
{
}
}
public class ProxyPatternExample : MonoBehaviour
{
private Proxy1 proxy1 = null;
public void ProxyLoad()
{
proxy1 = new Proxy1();
proxy1.Load();
}
public void ProxyUnLoad()
{
if (proxy1 != null)
{
proxy1.Unload();
}
proxy1 = null;
}
}
간단한 프록시 패턴을 유니티에서 구현한 예시이다.
프록시1 클래스는 1GB의 자원을 가정하고, Load() 메서드로 자원을 로드하고, Unload() 메서드로 자원을 해제하는 기능,
ProxyPatternExample 클래스에서는 Proxy1 객체를 생성하고, ProxyLoad() 메서드를 통해 자원을 로드하며, ProxyUnLoad() 메서드를 통해 자원을 해제한다.
여기서 Proxy1 클래스는 실제 자원을 다루는 RealSubject 역할을 하며, ProxyPatternExample 클래스는 클라이언트가 프록시를 통해 자원에 접근할 수 있도록 제어하는 역할을 한다. ProxyUnLoad() 메서드에서는 자원을 해제하기 전에 null 체크를 수행하여 메모리 누수를 방지하고 있다.
프록시 패턴의 핵심적인 특징은 실제 객체(RealSubject)에 대한 접근을 제어하고, 필요한 경우에만 실제 객체를 생성하고 사용한다는 점이다.
'개인 공부 > 디자인패턴' 카테고리의 다른 글
| 디자인패턴 책임 연쇄 패턴 (Chain of Responsibility) (0) | 2024.07.16 |
|---|---|
| 디자인패턴 컴포지트 (0) | 2024.07.15 |
| 디자인패턴 플라이웨이트 (경량패턴) (0) | 2024.07.15 |
| 디자인패턴 퍼사드 (0) | 2024.07.15 |
| 디자인패턴 데코레이터 (0) | 2024.07.15 |