✅ 프록시 패턴이란?
프록시 패턴은 실제 객체(Real Subject)에 대한 접근을 제어하는 대리 객체(Proxy)를 제공하는 디자인 패턴입니다. • 객체 생성 비용이 높은 경우, 실제 객체 대신 가벼운 프록시 객체를 사용하여 성능을 최적화할 수 있습니다. • 보안, 로깅, 캐싱 등의 기능을 추가할 때 유용합니다.
// 1. Subject 인터페이스
interface Image {
void display();
}
// 2. 실제 객체 (비싼 리소스를 사용하는 클래스)
class RealImage implements Image {
private String fileName;
public RealImage(String fileName) {
this.fileName = fileName;
loadImageFromDisk();
}
private void loadImageFromDisk() {
System.out.println(fileName + " 로딩 중...");
}
public void display() {
System.out.println(fileName + " 표시 중...");
}
}
// 3. 프록시 클래스 (지연 로딩 적용)
class ProxyImage implements Image {
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName) {
this.fileName = fileName;
}
public void display() {
if (realImage == null) {
realImage = new RealImage(fileName);
}
realImage.display();
}
}
// 4. 사용 예
public class Main {
public static void main(String[] args) {
Image image1 = new ProxyImage("test1.jpg");
Image image2 = new ProxyImage("test2.jpg");
// 실제 이미지는 처음 호출될 때만 로딩됨
image1.display(); // test1.jpg 로딩 중... -> test1.jpg 표시 중...
image1.display(); // test1.jpg 표시 중... (로딩 X)
image2.display(); // test2.jpg 로딩 중... -> test2.jpg 표시 중...
}
}
🔹 프록시 패턴의 장점과 단점
✅ 장점 • **지연 로딩(Lazy Loading)**으로 성능 최적화 가능 • 보안, 캐싱, 접근 제어 등의 추가 기능을 쉽게 구현 • 클라이언트는 실제 객체와 동일한 인터페이스를 사용하므로 코드 변경 없이 프록시 적용 가능
❌ 단점 • 프록시를 추가하면 구조가 복잡해질 수 있음 • 실제 객체가 단순한 경우, 오히려 불필요한 계층이 추가될 수 있음