CompositeDataInvocationHandler

CompositeDataInvocationHandler (복합 데이터 프록시 핸들러)

getter 메서드를 CompositeData로 전달하는 InvocationHandler예요. getter 메서드만(String getName() 또는 boolean isActive() 같은) 포함하는 인터페이스가 있다면, 이 클래스를 Proxy 클래스와 함께 사용해 각 getter가 CompositeData의 해당 항목 값을 반환하는 인터페이스 구현을 만들 수 있어요.

출처: Java API Reference

본문

예를 들어 다음과 같은 인터페이스가 있다고 해요.

public interface NamedNumber {
    public int getNumber();
    public String getName();
}

그리고 다음과 같이 CompositeData를 만들었다면:

CompositeData cd =
    new CompositeDataSupport(
        someCompositeType,
        new String[] {"number", "name"},
        new Object[] {5, "five"}
    );

NamedNumber를 구현하고 cd를 백업하는 객체를 다음과 같이 만들 수 있어요.

InvocationHandler handler = new CompositeDataInvocationHandler(cd);
NamedNumber nn = (NamedNumber)
    Proxy.newProxyInstance(NamedNumber.class.getClassLoader(),
                           new Class[] {NamedNumber.class},
                           handler);

그러면 nn.getNumber() 호출은 5를 반환해요.

getter가 정의하는 프로퍼티의 첫 글자가 대문자면, 이 핸들러는 먼저 대문자로 시작하는 CompositeData 항목을 찾고, 없으면 해당 소문자로 시작하는 항목을 찾아요. getNumber()면 먼저 Number, 그다음 number를 찾아요.

equals(Object)hashCode()Object에서 상속된 동작과 일관되게 처리돼요. equals는 인자가 같은 백업 CompositeData를 가진 같은 핸들러의 Proxy일 때 true를 반환해요.

주요 메서드로는 백업 CompositeData를 반환하는 getCompositeData()invoke(proxy, method, args)가 있어요.

더 알아보기 (Learn more)

Java 공식 API