프록시(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 |