Proxy란?
지금 당장 구글에 "Proxy"라고 검색을 한다면, Proxy Server에 대해서 볼 수 있을 것이다.
이건 프로그램에서의 Proxy가 아닌 통신에서의 Proxy인데, 사실 비슷한 구면이 있다.
Proxy Server는 클라이언트와 서버 사이에 존재하여, 요청들을 가로채어 다시 보내주는 구조인데, 프로그램에서의 Proxy 또한 메서드의 요청을 가로채어 다시 리턴해주는 구조를 띄고 있다.
Proxy는 어떨 때 쓸까?
아래와 같이 인터넷을 구현하기 위한 인터페이스와 고체 클래스가 있다고 해보자.
public interface IInternet {
void connectTo(String host);
}
public class Internet implements IInternet {
void connectTo(String host) {
System.out.println("Connecting to " + host);
}
}
하지만 특정 도메인을 금지시키기 위해 기능을 추가한다면 어떻게 해야 할까?
순수 구현체인 Internet을 수정하는건 올바르지 않은 방법이다. 따라서 아래와 같이 새로운 클래스를 만들 것 이다.
public class BlockedInternet implements IInternet {
void connectTo(String host) {
if (host.equals("www.blocked.com")) throw new RuntimeException();
System.out.println("Connecting to " + host);
}
}
이 방법이 최선의 방법일까? BlockedInternet에선 Internet의 connectTo의 기능을 한번 더 구현하고 있다.
따라서 이 코드는 아래처럼 수정할 수 있다.
public class BlockedInternet implements IInternet {
private final Internet internet = new Internet();
void connectTo(String host) {
if (host.equals("www.blocked.com")) throw new RuntimeException();
internet.connectTo(host);
}
}
이것이 바로 Proxy 패턴이다.
'Java' 카테고리의 다른 글
[Java] Dynamic Proxy (0) | 2024.05.23 |
---|---|
[Java] Virtual Thread (0) | 2024.05.12 |