프록시(Proxy) 패턴이란?
프록시패턴은 특정 객체를 대신하여 처리하게 함으로써 로직의 흐름을 제어하는 행동패턴이다.
사용자가 A객체의 methodA라는 메서드를 호출하려고 할 때 프록시 패턴을 사용해서 B객체의 methodB를 호출하고 추가적인 로직을 추가로 수행한 뒤 methodA를 호출하는 것이다. 이를 사용하는 이유는 대상 클래스가 민감한 정보를 가지고 있거나 원본 객체를 수정할 수 없는 상황일 때 추가적인 기능을 사용하기 위해서이다.
프록시 패턴을 사용했을 때 좋은 경우
- 보안
- 클라이언트가 작업을 수행할 수 있는 권한이 있는지 확인한 후 요청된 작업 수행
 
- 캐싱
- 프록시 내부에 캐시를 생성하여 데이터에 캐시가 존재하는 경우에 캐싱된 데이터를 반환하여 응답시간을 단축시킨다.
 
- 데이터 유효성 검사
- 프록시가 작업을 수행하기 전에 입력 받은 데이터가 유효한지 확인 후 작업 수행
 
- 지연 초기화
- 요청받은 대상의 객체 생성 비용이 비싸다면 프록시는 그것이 필요할 때 까지 연기할 수 있다.
 
- 로깅
- 작업을 수행하기 전후로 로그를 기록한다.
 
- 원격 객체
- 연격 위치에 있는 객체를 가져와서 로컬처럼 보이게 한다.
 
turnOn의 기능을 가진 인터페이스 TV를 선언하고 구현체인 SamsungTV를 선언한다.
interface TV {
    void turnOn();
}
class SamsungTV implements TV {
    @Override
    public void turnOn() {
        System.out.println("삼성티비 전원 ON");
    }
}
필드변수로 TV 객체를 가지는 프록시 클래스를 선언하고 인터페이스를 구현한다.
class ProxySamsungTV implements TV {
    private final TV tv;
    ProxySamsungTV(TV tv) {
        this.tv = tv;
    }
    @Override
    public void turnOn() {
        System.out.println("프록시 로깅 시작");
        tv.turnOn();
        System.out.println("프록시 로깅 종료");
    }
}
SamsungTV의 전원을 키는 동작을 동일하게 수행하지만 프록시 객체를 사용해서
메서드의 실행 전후로 로깅기능을 추가 수행할 수 있다.
    TV tv = new ProxySamsungTV(new SamsungTV());
    tv.turnOn();

'자바' 카테고리의 다른 글
| [디자인 패턴] 템플릿 메서드(Template Method) 패턴 (0) | 2024.03.18 | 
|---|---|
| [디자인 패턴] 팩토리 메서드(Factory Method) 패턴 (0) | 2024.03.17 | 
| [디자인 패턴] 싱글톤(Singleton) 패턴 (0) | 2024.03.15 | 
| 컬렉션 프레임워크(Collection Framework) (0) | 2022.12.09 | 
| Auto Boxing/UnBoxing (0) | 2022.12.09 | 
