CompositeTypeBasedGuardingDynamicLinker

CompositeTypeBasedGuardingDynamicLinker (복합 타입 기반 링커)

타입 기반으로 동작하는 복합 가드형 동적 링커입니다. 아직 보지 못한 클래스의 리시버를 만나면 모든 링커의 canLinkType(Class)를 차례로 조회해, true를 반환한 링커들을 그 클래스에 바인딩합니다. 이후 같은 타입의 리시버를 만나면 그 링커들에게만 연결을 위임해 디스패치를 빠르게 해요.

출처: Java API Reference

본문

TypeBasedGuardingDynamicLinker를 구현하며, 클래스별로 연결할 수 있는 링커들을 미리 정해 두고 같은 타입이 반복될 때의 조회 비용을 줄여주는 것이 핵심입니다. 처음 보는 타입을 만났을 때만 모든 구성 링커를 조회하고, 이후에는 캐시된 링커 목록으로 빠르게 연결합니다.

타입 기반 링커 간의 협업이 복잡해질 때는 optimize를 통해 비효율을 줄일 수 있어요. 각 리시버 타입에 대해 한 번만 판단하면 되기 때문에, 많은 링커가 등록된 환경에서도 반복적인 조회 없이 매끄럽게 동작하는 것이 이 클래스의 목표입니다.

생성자

  • CompositeTypeBasedGuardingDynamicLinker(Iterable<? extends TypeBasedGuardingDynamicLinker> linkers) — 새 복합 타입 기반 링커를 만듭니다. linkers나 그 요소가 null이면 NullPointerException이 발생해요.

주요 메서드

  • canLinkType(Class<?> type) — 구성 링커 중 적어도 하나가 그 타입에 대해 true를 반환하면 true를 돌려줍니다.

  • getGuardedInvocation(LinkRequest, LinkerServices) — 콜 사이트에서 지정한 인자로 특정 호출에 알맞은 가드된 호출을 만듭니다.

  • optimize(Iterable<? extends GuardingDynamicLinker> linkers) — 타입 기반 링커들의 목록을 최적화합니다. 타입 기반이 아닌 링커들을 추리거나 그룹화하는 식으로 디스패치 성능을 높여요.

더 알아보기

Java 공식 API