ballqs 님의 블로그
[Java] Proxy 패턴이란? 본문
Proxy 패턴이란?
프록시 패턴은 실제 객체에 대한 접근을 제어하고, 추가적인 기능을 제공하기 위해 사용되는 디자인 패턴이다.
마치 대리인처럼 실제 객체를 대신하여 동작하며, 다양한 상황에서 유용하게 활용될 수 있다.
Proxy 패턴 장점
접근 제어
- 실제 객체에 대한 직접적인 접근을 제한하고, 프록시를 통해서만 접근하도록 함으로써 보안을 강화할 수 있다.
- 특정 조건에 따라 접근을 허용하거나 거부할 수 있다.
추가 기능 제공
- 실제 객체의 기능을 확장하여 새로운 기능을 추가할 수 있다.
- 예를 들어, 캐싱, 로그 기록, 권한 검사 등을 프록시에서 처리할 수 있다.
지연 로딩
- 실제 객체를 필요한 시점까지 생성하지 않고, 프록시 객체를 통해 미리 참조할 수 있다.
- 이는 큰 객체를 로딩하는 데 드는 시간을 절약하고 시스템 성능을 향상시킬 수 있다.
원격 프록시
- 네트워크를 통해 다른 시스템에 있는 객체에 접근할 때, 프록시를 사용하여 네트워크 통신을 처리하고 데이터를 변환할 수 있다.
가상 프록시
- 아직 구현되지 않은 기능을 미리 정의하고, 프록시를 통해 가상 객체처럼 사용할 수 있다.
Proxy 패턴 단점
복잡성 증가
- 프록시 객체를 추가하면 시스템의 복잡성이 증가할 수 있다.
- 프록시와 실제 객체 간의 관계를 관리해야 하는 부담이 생긴다.
성능 저하
- 프록시를 거쳐 객체에 접근하기 때문에, 실제 객체에 직접 접근하는 것보다 성능이 저하될 수 있다.
- 특히, 빈번한 메서드 호출이 발생하는 경우 성능 저하가 더욱 두드러질 수 있다.
코드량 증가
- 프록시 클래스를 별도로 구현해야 하므로 코드량이 증가한다.
코드 예시
Subject.java 작성
public interface Subject {
void request();
}
RealSubject.java 작성
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("Proxy request");
}
}
Proxy.java 작성
public class Proxy implements Subject {
private Subject subject;
@Override
public void request() {
if (this.subject == null) {
this.subject = new RealSubject();
}
subject.request();
}
}
Main.java
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
Subject subject = new Proxy();
subject.request();
}
}
프록시 패턴의 적용 사례
- 파일 시스템: 파일 시스템에서 파일을 열기 전에 파일의 존재 유무를 확인하고, 필요한 권한이 있는지 검사하는 프록시를 사용할 수 있습니다.
- 데이터베이스: 데이터베이스에 접근하기 전에 연결을 확인하고, 쿼리 결과를 캐싱하는 프록시를 사용할 수 있습니다.
- 네트워크: 원격 서버에 있는 객체에 접근할 때, 네트워크 통신을 처리하고 데이터를 변환하는 프록시를 사용할 수 있습니다.
'코딩 공부 > Java' 카테고리의 다른 글
[Java] 프로그래머스 문제 - 미로 탈출 (0) | 2024.11.27 |
---|---|
[Java] 프로그래머스 문제 - 점 찍기 (0) | 2024.08.27 |
[Java] Stack를 활용한 DFS 알고리즘으로 푼 문제 (0) | 2024.08.16 |
[Java] 투 포인터(Two Pointer) 알고리즘이란? (0) | 2024.08.13 |
[Java] Comparator compare() 과 Comparable compareTo() (0) | 2024.08.06 |