invokedynamic이란 무엇이며 어떻게 사용합니까?
JVM에 추가되는 모든 새로운 멋진 기능에 대해 계속 듣고 있으며 이러한 멋진 기능 중 하나는 invokedynamic입니다. 나는 그것이 무엇인지 알고 싶습니다. 어떻게 Java에서 반사 프로그래밍을 더 쉽게 또는 더 좋게합니까?
이것은 새로운 JVM 명령어로, 컴파일러가 이전보다 더 느슨한 사양으로 메소드를 호출하는 코드를 생성 할 수있게합니다. " 덕 타이핑 "이 무엇인지 알고 있다면 invokedynamic은 기본적으로 오리 타이핑을 허용합니다. 자바 프로그래머가 할 수있는 것만 큼 많지는 않다. 툴 제작자라면이를 사용하여보다 유연하고 효율적인 JVM 기반 언어를 구축 할 수 있습니다. 여기 에 많은 세부 사항을 제공하는 정말 달콤한 블로그 게시물이 있습니다.
얼마 전에 C #은 C # 내에 멋진 기능, 동적 구문을 추가했습니다.
Object obj = ...; // no static type available
dynamic duck = obj;
duck.quack(); // or any method. no compiler checking.
반사 메소드 호출의 구문 설탕으로 생각하십시오. 매우 흥미로운 응용 프로그램을 가질 수 있습니다. 참조 http://www.infoq.com/presentations/Statically-Dynamic-Typing-Neal-Gafter를
C #의 동적 유형을 담당하는 Neal Gafter는 SUN에서 MS로 결함이 있습니다. 따라서 같은 일이 SUN 내부에서 논의되었다고 생각하는 것은 무리가 없습니다.
얼마 지나지 않아 일부 Java 친구가 비슷한 것을 발표했습니다.
InvokeDynamic duck = obj;
duck.quack();
불행히도이 기능은 Java 7에서 찾을 수있는 곳이 아닙니다. 매우 실망했습니다. Java 프로그래머에게는 프로그램에서 쉽게 활용할 수있는 방법이 없습니다 invokedynamic
.
invokedynamic을 계속하기 전에 이해해야 할 두 가지 개념이 있습니다.
1. 정적 대 다이너 민 입력
정적 -컴파일 타임에 형식 검사를 수행합니다 (예 : Java)
동적 -런타임시 형식 검사를 수행합니다 (예 : JavaScript)
형식 검사는 프로그램이 형식에 안전한지 확인하는 프로세스입니다. 즉, 클래스 및 인스턴스 변수, 메서드 매개 변수, 반환 값 및 기타 변수에 대한 형식화 된 정보를 검사합니다. 예를 들어 Java는 컴파일 타임에 int, String, ..에 대해 알고 있지만 JavaScript의 객체 유형은 런타임에만 결정할 수 있습니다.
2. 강한 대 약한 타이핑
강력 함 -조작에 제공된 값 유형에 대한 제한 사항을 지정합니다 (예 : Java).
약함 -조작의 인수가 호환되지 않는 유형 (예 : Visual Basic)을 갖는 경우 조작의 인수를 변환 (캐스트)합니다.
Java가 정적이고 약한 유형임을 알고 JVM에서 동적 및 강력 유형 언어를 어떻게 구현합니까?
invokedynamic은 프로그램이 컴파일 된 후 가장 적합한 메소드 또는 함수 구현을 선택할 수있는 런타임 시스템을 구현합니다.
예 : (a + b)를 가지고 컴파일 타임에 변수 a, b에 대해 아는 것은 invokedynamic이 런타임에 Java에서 가장 적합한 메소드에이 조작을 맵핑합니다. 예를 들어, a, b가 문자열 인 경우 method (String a, String b)를 호출하십시오. a, b가 int 인 경우 method (int a, int b)를 호출하십시오.
invokedynamic은 Java 7에서 도입되었습니다.
참고 URL : https://stackoverflow.com/questions/6638735/whats-invokedynamic-and-how-do-i-use-it
'Programing' 카테고리의 다른 글
C에서 괄호는 스택 프레임 역할을합니까? (0) | 2020.06.09 |
---|---|
mavn에서 mvn가 정확히 무엇을 설치합니까? (0) | 2020.06.09 |
css 파일을 안에 넣는 경우 차이점은 무엇입니까? (0) | 2020.06.09 |
.NET에서 바이트의 리터럴 접미사? (0) | 2020.06.09 |
Object.GetHashCode ()의 기본 구현 (0) | 2020.06.09 |