Tag Archives: MethodHandle

Dynamic Language Support on Java

자바7에서는 동적 언어 지원(Dynamic Language Support) 기능이 추가되었다. 이는 2006년 3월에 JSR 리뷰 투표를 통과하며 시작된 표준 요청으로, 그 결과에 따라 JSR 292(Supporting Dynamically Typed Languages on the Java Platform)가 정의되었다. 최초 리뷰 투표의 내용을 살펴보면 동적 타입 지원 기능을 자체가 본래의 목적이었던 것으로 보이며, 동적 언어 지원이라는 측면은 추가적인 커멘트로 언급되어 있다. 하지만 자바7에 적용된 최종 표준에서는 결국 동적 언어 지원을 명시하며 확장된 형태의 동적 타입 지원 기능이 제정되게 되었다.

동적 언어 지원이란 기존의 정적인 타입 바인딩의 제약에서 벗어나 런타임에 동적으로 타입을 바인딩해주는 기능을 핵심으로 하며, 결국 타입에 대한 유연성과 지연 타입 바인딩을 가능케 하여 동적 언어(예, 파이선, 루비)와의 연동을 용이하게 한다. 리플렉션을 통해서도 유사한 기능을 구현할 수는 있지만, java.lang.invoke(참조: JDK1.7 Package java.lang.invoke)이라는 별도의 팩키지를 통해 전용 바이트 코드 명령과 API를 제공하여 보다 적은 비용으로 동적 타입 바인딩 기능을 수행할 수 있게 됐다. 실제로 사용하는 방법은 리플렉션의 사용법과 유사하며, 일반적 개발자 수준에서는 추가된 CallSite의 개념 정도가 의미있지 않나 생각해본다. 보다 자세한 소개는 오라클의 기사를 살펴보도록 하자(참조: Dynamic Language Support on the Java Virtual Machine, New JDK 7 Feature: Support for Dynamically Typed Languages in the Java Virtual Machine).

덧해서, 마이크로소프트의 .NET에서도 동일한 기능을 지원하고 있으며, 해당 기능은 새롭게 추가된 DLR(참조: MSDN – Dynamic Language Runtime Overview) 계층을 통해 제공된다. DLR은 .NET Framework 4.0에서 추가된 기능으로, DLR이나 DLR에서 추가된 키워드 dynamic에 대해 살펴본다면 보다 자세한 정보를 확인할 수 있다. 마이크로소프트의 DLR 프로젝트는 2007년에 발표되었다고 하는데, 언제나 그렇듯이 오픈소스 진영에서 자바 표준을 제정해나가는 모습을 모니터링해서 그저 차용한 것 같다는 찝찝한 아쉬움이 남는다. 물론 큰 기업이고 자본이 있기 때문이여서일까 최종 버전의 릴리즈는 자바보다 조금 빠를 수 있었다.