더북(TheBook)

4.5.7 프록시


Proxy 클래스는 실행 시간에 지정받은 인터페이스 한 개나 일련의 인터페이스를 구현하는 새로운 클래스를 생성할 수 있다. 이런 프록시(proxy)는 컴파일 시간에 어느 인터페이스를 구현해야 하는지 아직 모를 때만 필요하다.

프록시 클래스는 지정받은 인터페이스에서 요구하는 모든 메서드와 Object 클래스에 정의된 모든 메서드(toString, equals 등)를 가진다. 하지만 실행 시간에 이런 메서드에 대응하는 새로운 코드를 정의하지는 못하므로 호출 핸들러를 전달해야 한다. 호출 핸들러(invocation handler)InvocationHandler 인터페이스를 구현한 클래스의 객체를 의미한다. InvocationHandler 인터페이스에는 invoke 메서드 하나만 선언되어 있다.

Object invoke(Object proxy, Method method, Object[ ] args)


프록시 객체로 메서드를 호출할 때마다 호출 핸들러의 invoke 메서드가 호출되는데, 이때 Method 객체와 원래 호출의 매개변수가 인수로 전달된다. 호출 핸들러는 반드시 해당 호출을 처리할 방법을 알아야 한다. 호출 핸들러는 호출을 원격 서버로 전달하거나 디버깅 목적으로 호출을 추적하는 등 다양하게 작동할 수 있다.

프록시 객체를 생성하려면 Proxy 클래스의 newProxyInstance 메서드를 사용해야 한다. newProxyInstance 메서드는 다음 세 가지 매개변수를 받는다.

클래스 로더(4.4.3 클래스 로더 참고) 또는 기본 클래스 로더를 사용하는 null

Class 객체의 배열(구현할 인터페이스마다 한 개씩)

호출 핸들러

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.