GuardingTypeConverterFactory

GuardingTypeConverterFactory (언어별 타입 변환 팩토리)

GuardingDynamicLinker 구현이 언어별 타입 변환 기능을 제공하기 위해 선택적으로 구현할 수 있는 인터페이스입니다.

출처: Java API Reference

본문

이 인터페이스를 구현한다면 ConversionComparator 인터페이스도 함께 구현하는 것이 좋아요. 추가된 언어별 변환은 우선순위 전략이 없으면 BeansLinker가 오버로드된 자바 메서드에 연결할 때 올바른 오버로드를 고르는 데 더 큰 모호성을 만들기 때문입니다.

이 인터페이스를 통해 언어 런타임은 자신의 객체를 자바의 타입으로 변환하는 규칙을 직접 제공할 수 있습니다. 변환이 가드된 호출 형태로 반환되므로, 런타임에 타입 조건을 검사해 변환 적용 여부를 결정하는 것도 가능해요.

이런 접근은 한 레퍼런스 타입을 여러 타깃 타입으로 상황에 따라 다르게 변환해야 하는 복잡한 시나리오에서 특히 유용합니다. 일반적인 자바 변환으로는 다루기 어려운 언어 특유의 변환 규칙을 담아낼 수 있어요.

메서드

  • convertToType(Class<?> sourceType, Class<?> targetType, Supplier<MethodHandles.Lookup> lookupSupplier) — 지정한 소스 타입의 값을 받아 지정한 타깃 타입으로 변환된 값을 반환하는 가드된 타입 변환을 돌려줍니다. 값 타입은 프리미티브나 인터페이스를 포함한 참조 타입 모두 가능해서, 언어 객체를 자바 인터페이스·클래스로 바꾸는 어댑터를 생성해 변환기를 제공할 수도 있어요. 호출의 타입은 (sourceType)→targetType, 가드의 타입은 (sourceType)→boolean입니다.

소스 타입이 오직 해당 런타임에만 있는 경우라면 가드 없는 무조건 호출을 반환해도 됩니다. 이 메서드는 메서드 호출 변환을 위해서는 호출되지 않는데, 그런 변환은 MethodHandle.asType(MethodType)로 자동 적용될 수 있기 때문이에요.

lookupSupplier는 타입 변환기가 요청된 클래스의 룩업을 얻기 위한 공급자이고, 작업이 실패하면 Exception을 던질 수 있어요.

더 알아보기

Java 공식 API