본문 바로가기

javascript/pure

[자바스크립트] [native code]의 의미

타입스크립트 환경에서 useImperativeHandle을 이용하여 ref을 이용하던 도중, 코드가 제대로 동작하지 않는 상황이 발생했다. 혹시 해당 함수가 존재하지 않는 것인가 하는 의문이 들어 이를 console.log을 이용하여 출력했다.

 

사용된 handle
에러 메시지. 잘못된 호출임을 알리고 있다.

이때, 내부 코드가 [native code] 로 나타나는 것을 알게 되었다. 여기서 궁금증이 생겼는데, 대체 native code은 뭘까?

이를 이해하기 위해서는 자바스크립트 엔진을 이해하는 것이 좋다. 자바스크립트는 웹 환경에서 빠르게 개발하기 위한 언어를 구상하던 과정에서 생겨난 언어로, 자바스크립트가 돌아가는 엔진 자체는 보통 C / C++ , 최근의 경우 Rust 등의 성능을 중시하는 언어를 통해 작성된다. 이때 console.log 등 엔진에 내장된 기능은 보통 해당 언어를 이용하거나, 자바스크립트로 작성하더라도 최적화를 위해 바이너리 코드 형태로 저장한다. 두 경우 모두 자바스크립트 코드로 나타낼 수 없으며, 자바스크립트 코드가 아니므로 이들을 작성된 그대로 공개할 필요도 없다. 

요약

자바스크립트에서 나타나는 [native code]는 해당 코드가 자바스크립트로 구현되지 않았거나, 바이너리 코드 형태를 가지고 있어 이들을 사용자에게 공개할 필요도, 가치도 없는 경우를 의미한다. 자바스크립트가 이러한 함수들의 구현을 자바스크립트 엔진 제작자들의 역량에 맡긴다는 것을 생각해보면 사실 당연한 이야기다.

참고한 사이트

https://stackoverflow.com/questions/11234664/what-does-native-code-mean