ConversionComparator

ConversionComparator (변환 선호도 비교자)

GuardingTypeConverterFactory 구현자들이 선택적으로 구현할 수 있는 인터페이스입니다. 언어별 변환 때문에 오버로드된 메서드 해석의 모호성이 커지는 경우, 어느 변환이 더 선호되는지를 런타임이 직접 표현하게 해 줍니다.

출처: Java API Reference

본문

언어별 변환이 추가되면 더 많은 메서드가 적용 가능해지면서 '가장 특정한' 메서드를 정적으로 고르는 방식이 실패할 수 있어요. 서로 연관이 없는 시그니처를 가진, 최대로 특정한 메서드가 여럿 생기기 때문입니다. 이럴 때 언어 런타임은 한 변환을 다른 변환보다 선호한다는 의사를 표현해 모호성을 해소할 수 있어요.

이 인터페이스는 비교 결과를 나타내는 중첩 열거형 ConversionComparator.Comparison을 정의합니다. 두 타깃 타입 중 어떤 것이 소스 타입에서 변환할 때 선호되는지(compareConversion)를 판단하는 방식으로 동작해요.

메서드

  • compareConversion(Class<?> sourceType, Class<?> targetType1, Class<?> targetType2) — 소스 타입에서 두 타깃 타입 중 어느 쪽이 선호되는 변환 타깃인지 결정합니다. 반환값은 Comparison 상수 중 하나로, 두 타깃 중 어느 쪽(혹은 어느 쪽도 아닌지)이 변환에 선호되는지가 표현돼요.

이 인터페이스를 사용하면 오버로드 해석 시 런타임 특유의 변환 선호도를 반영해 더 정확한 메서드를 고를 수 있다는 점이 장점입니다. 예를 들어 어떤 런타임이 문자열을 숫자로 변환하는 것을 선호한다면, 그 변환을 우선시하도록 비교 결과로 표현할 수 있어요.

구현자 입장에서는 GuardingTypeConverterFactoryconvertToType과 짝을 이루어, 런타임이 제공하는 여러 변환 중 어느 것이 우선인지를 이 인터페이스로 결정하면 됩니다.

비교 결과는 Comparison 열거형에 담기며, 두 타깃 중 첫 번째를 선호하는지, 두 번째를 선호하는지, 아니면 둘 다 동등한지가 표현됩니다.

더 알아보기

Java 공식 API