Proxy — 동적 프록시 생성 클래스

Proxy — 동적 프록시 생성 클래스

Proxy는 인터페이스의 인스턴스처럼 동작하지만 맞춤형 메서드 호출을 허용하는 객체를 만들기 위한 정적 메서드를 제공해요. 어떤 인터페이스 Foo에 대한 프록시 인스턴스를 만들려면:

InvocationHandler handler = new MyInvocationHandler(...);
Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                                     new Class<?>[] { Foo.class },
                                     handler);

프록시 클래스(proxy class)는 런타임에 생성되어 지정된 인터페이스 목록(프록시 인터페이스)을 구현하는 클래스예요. 프록시 인스턴스는 프록시 클래스의 인스턴스예요. 각 프록시 인스턴스는 InvocationHandler 인터페이스를 구현하는 연관된 호출 핸들러 객체를 가져요. 프록시 인터페이스 중 하나를 통해 프록시 인스턴스에 메서드가 호출되면, 그 호출은 인코딩되어 호출 핸들러의 invoke 메서드로 전달돼요.

출처: Java API Reference

본문

protected InvocationHandler h — 이 프록시 인스턴스의 호출 핸들러예요. 프록시 인스턴스에서 Proxy 메서드의 보호 필드로 제공돼요.

protected Proxy(InvocationHandler h) — 지정된 호출 핸들러로 새 프록시 인스턴스를 만들어요. 이 생성자는 InvocationHandler 인터페이스를 구현하는 프록시 서브클래스에서 호출돼요.

@Deprecated public static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces) — 지정된 클래스 로더와 인터페이스 목록의 프록시 클래스(클래스 객체)를 반환해요. newProxyInstance를 사용하는 것이 더 권장되므로 사용 중지됐어요.

public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) — 지정된 인터페이스를 구현하는 새 프록시 인스턴스를 반환해요. 호출 핸들러 h로 각 인터페이스 메서드 호출을 디스패치해요. 아래 타입 불일치 시 IllegalArgumentException을 던져요.

public static boolean isProxyClass(Class<?> cl)cl이 프록시 클래스인지 여부를 반환해요. Proxy 클래스의 서브클래스이고 newProxyInstance 또는 getProxyClass로 생성됐을 때만 true예요.

public static InvocationHandler getInvocationHandler(Object proxy) throws IllegalArgumentException — 지정된 프록시 인스턴스의 호출 핸들러를 반환해요. 인자가 프록시 인스턴스가 아니면 IllegalArgumentException을 던져요.

더 알아보기 (Learn more)