Structuring method calls

2023. 5. 2. 16:00High Level Programming Language/Reflection

"인코딩"이라는 개념을 사용하는 이유는 다이나믹 프록시에서 메서드 호출이 단순히 다른 객체로 전달되는 것이 아니라, 호출된 메서드와 아규먼트들이 일종의 데이터로 변환(또는 인코딩)되어 전달되기 때문입니다. 이 과정을 통해 메서드 호출에 대한 상세한 정보가 포함된 java.lang.reflect.Method 객체와 아규먼트들이 Object[] 배열로 표현되어, Invocation Handler에 전달될 수 있게 됩니다.

왜 인코딩이라고 설명하는가?

  1. 메서드 호출의 구조화: 메서드 이름, 파라미터 타입, 리턴 타입, 아규먼트 등의 정보는 단순한 값이 아니라, 복잡한 구조로 이루어진 데이터입니다. 이 정보를 java.lang.reflect.Method 객체와 Object[] 배열로 변환하는 과정은 마치 데이터를 인코딩하는 과정과 유사합니다. 이를 통해 메서드 호출의 모든 관련 정보가 구조화된 형식으로 저장됩니다.
  2. 리플렉션(reflection) 사용: 리플렉션을 통해 메서드 정보를 동적으로 처리할 때, 호출된 메서드를 식별하고 해당 메서드를 처리하는 방식은 일종의 "인코딩된 데이터"를 해석하여 실행하는 것과 비슷합니다. 리플렉션은 프로그램 실행 중에 타입에 대한 정보를 동적으로 다루는 방법이므로, 메서드 호출이 마치 데이터처럼 다루어질 수 있습니다.
  3. Invocation Handler에서의 해석: Invocation Handler는 전달받은 Method 객체와 아규먼트들을 해석하여 적절한 동작을 수행합니다. 이 과정은 인코딩된 데이터를 해석하고 처리하는 과정과 유사하게 이해될 수 있습니다.

요약:

"인코딩"이라는 용어는 메서드 호출이 단순한 호출 이상의 복잡한 데이터 구조로 변환되어 처리된다는 점을 강조하기 위한 표현입니다. 이를 통해 메서드 호출의 모든 정보가 핸들러로 전달되고, 핸들러는 이 정보를 기반으로 적절한 로직을 수행할 수 있습니다.

'High Level Programming Language > Reflection' 카테고리의 다른 글

Proxy Target Class 조건  (0) 2023.05.17
sealed interface  (0) 2023.05.08
Java Class Object  (0) 2023.05.02
Java Dynamic Proxy Classes  (0) 2023.04.28
Lesson: Members  (0) 2023.04.17