GuardedInvocationTransformer

GuardedInvocationTransformer (가드된 호출 변환기)

한 가드된 호출을 다른 가드된 호출로 변환하는 데 사용되는 객체를 위한 인터페이스입니다. 전형적인 용도는 사전 연결(pre-link) 변환기를 구현하는 것이에요. 함수형 인터페이스라 람다나 메서드 참조로 사용할 수 있습니다.

출처: Java API Reference

본문

링크 요청에 대한 GuardedInvocation이 어떤 링커에 의해 만들어진 뒤, 이 변환기의 filter 메서드를 거치면 원본 그대로이거나 변형된 호출로 바뀌어 최종 링크에 반영됩니다. DynamicLinkerFactory.setPrelinkTransformer(...)로 설정해 링크 과정 중간에 개입할 수 있어요.

이런 변환기를 쓰면 링크가 최종 확정되기 전에 가드나 호출 핸들을 한 단계 더 다듬을 수 있습니다. 예를 들어 특정 조건에 따라 호출의 타입을 바꾸거나 가드를 추가하는 식의 전처리가 가능해져요.

전형적인 쓰임새를 보면, 사전 연결 변환기는 링커가 만든 호출을 받아 링크 요청의 세부 조건에 맞게 조정합니다. 반환 타입을 변환하거나, 가드에 추가 검증을 덧붙이거나, 특정 리시버 타입에 대해서만 동작하도록 다듬는 처리가 여기서 이루어져요.

이렇게 하면 각 링커를 수정하지 않고도 링크 전반에 걸친 공통 정책을 한 곳에서 적용할 수 있답니다. 필터라는 이름답게 원본을 그대로 넘길 수도 있고, 바꿔서 넘길 수도 있는 유연한 설계라서 여러 정책을 겹쳐 쓰기도 쉬워요. 함수형 인터페이스라 람다로 간단히 만들 수 있어요.

메서드

  • filter(GuardedInvocation inv, LinkRequest linkRequest, LinkerServices linkerServices) — 주어진 가드된 호출에 대해, 같은 것이거나 어쩌면 다른 가드된 호출을 반환합니다. 차이는 보통 링크 요청(linkRequest)의 정보를 바탕으로 정해지고, 링커 서비스(linkerServices)의 도움으로 새 호출이 만들어져요. 반환값으로 null을 허용할지는 변환기를 사용하는 쪽에 달려 있습니다. 구현이 전달된 인자 중 null이 있으면 NullPointerException을 던질 수 있어요.

더 알아보기

Java 공식 API