LinkRequest

LinkRequest (링크 요청)

특정 콜 사이트에서 특정 호출을 연결하라는 요청을 나타내는 인터페이스입니다. 이런 요청 객체들은 콜 사이트를 연결하려는 DynamicLinker가 관리하는 모든 GuardingDynamicLinker 객체에 전달됩니다. 대표적인 구현체로 SimpleLinkRequest가 있어요.

출처: Java API Reference

본문

LinkRequest는 연결 대상 호출에 대한 정보를 담고 있습니다. 콜 사이트 설명자, 호출 인자, 리시버(수신 객체), 콜 사이트 안정성 여부 등을 링커에게 알려줘요. 링커는 이 정보를 바탕으로 해당 호출에 맞는 메서드 핸들과 가드를 결정합니다.

주요 메서드

  • getCallSiteDescriptor() — 연결 대상 콜 사이트의 설명자를 반환합니다.

  • getArguments() — 연결 대상 호출의 인자들을 반환합니다. 반환된 배열은 복제본이라, 수정해도 이 요청의 인자에는 영향이 없어요.

  • getReceiver() — 연결 대상 호출의 첫 번째 인자를 반환합니다. 보통 수신 객체(리시버)예요. getArguments()[0]의 줄임 표현으로, 인자 배열을 복제하지 않아도 된다는 장점이 있습니다.

  • isCallSiteUnstable() — 콜 사이트가 불안정한 것으로 간주되는지(즉 DynamicLinkerFactory.setUnstableRelinkThreshold(int)에서 지정한 횟수보다 더 재연결되었는지) true/false로 반환해요. 링커는 이 값을 힌트로 삼아 가드 실패가 덜 잦은 더 안정적인 연결을 선호할 수 있지만, 어디까지나 힌트라서 무시해도 됩니다.

  • replaceArguments(CallSiteDescriptor callSiteDescriptor, Object... arguments) — 콜 사이트 설명자와 인자를 지정한 값으로 바꾼, 이 요청과 동일한 새 요청을 반환합니다.

링커들이 이 요청을 그대로 다른 링커에게 전달하거나, 인자나 설명자를 바꿔 가며 여러 호출을 시도하는 흐름을 위해 설계된 인터페이스예요. 특히 replaceArguments는 링커가 인자를 변환한 뒤 다시 연결을 시도하고 싶을 때 유용하게 쓰입니다.

더 알아보기

Java 공식 API