[TIL] 자바스크립트는 인터프리터 언어이다?

박먼지·2023년 8월 11일
1
post-thumbnail

자바스크립트는 인터프리터 언어이다.

라고 굳게 믿고있었던 나..

자바스크립트를 다시 공부하면서 자바스크립트 엔진이 JIT 컴파일을 사용한다는 것을 알게되었다.

그러면 인터프리터 언어가 아니냐? 하기엔 또 MDN이

JavaScript is a lightweight, interpreted, or Just In Time compiled programming language.

인터프리터거나 JIT로 컴파일된 프로그래밍 언어라고 한다.

기본적으로는 인터프리터 언어인데 JIT 컴파일을 지원한다는 뜻인지..🤔 잘 모르겠어서 이에 대해 자세히 알아보기로 했다!

컴파일러와 인터프리터

우선 컴파일러와 인터프리터가 무엇인지에 대해 알아보자.

Compiler(컴파일러)

컴파일러는 프로그램 전체를 스캔하여서 고급 언어(사람이 이해할수 있는 언어)를 기계어로 번역한다. 전체를 스캔하기 때문에 초기 스캔 시간이 오래걸리지만, 초기 스캔을 마치면 실행 파일을 만들어 놓아서 다음에 실행할 때 이전에 만들어 놓았던 실행파일을 실행하기 때문에 전체 실행 시간만 따지고 보면 인터프리터 보다 빠르다!

Interpreter(인터프리터)

인터프리터는 프로그램 실행 시에 한 번에 한 문장씩 번역하고 실행한다. 한 줄씩 번역하고 실행하기 때문에 컴파일러보다 느리지만 코드를 변경할 때 빌드 과정 없이 실행이 가능해서 개발 속도가 빠르다는 장점이 있다.

자바스크립트는 기본적으로 인터프리터 언어이다.

자바스크립트는 웹을 동적으로 만들기 위한 스크립트 언어로 개발이 빠르고 가볍기 때문에 인터프리터 방식을 채택했다.
컴파일러 언어의 경우 수정을 할 때마다 일일이 컴파일을 해야 하기 때문에 수정이 빈번하게 발생하는 경우 인터프리터 방식이 유리하다!

이렇게 자바스크립트는 인터프리터 언어로서 기능을 해왔는데, 2009년 구글이 구글맵스를 개발하게 되면서 자바스크립트의 성능 개선의 필요성을 느꼈다. 지도 어플리케이션은 사용자와의 상호작용이 많은데, 자바스크립트의 인터프리터 방식은 한 줄 한 줄 번역하고 실행하기 때문에 속도가 느렸기때문이다.

그래서 구글은 컴파일러와 인터프리터 방식을 결합한 JIT 컴파일러 방식을 채택해 V8 엔진을 출시하게 된다.

just-in-time 컴파일

just-in-time(이하 JIT)컴파일은 프로그램을 실행하는 시점에서 필요한 부분을 즉석으로 컴파일하는 방식을 말한다.

컴파일 하는 방식? 그럼 컴파일러와 뭐가 다를까??

컴파일러와 다른 점

컴파일러는 프로그램을 실행하기 전에 처음 한번 컴파일을 하는 것이고,
JIT 컴파일은 프로그램을 실행하는 시점에서 컴파일 하는 것이다.

컴파일러와는 실행하는 시점이 다르다는 것은 알겠다.

그러면 위에서 "필요한 부분을 즉석으로" 컴파일 한다고 했는데, 그럼 한 줄 한 줄 실행하는 인터프리터와는 뭐가 다른걸까?!

인터프리터와 다른 점

최적화가 가장 큰 차이점이라고 한다.

인터프리터는 이전에 실행되었는지 여부에 관계 없이 코드가 실행될 때 마다 기계어로 바꾸고 실행하는데, JIT는 이전에 실행된 기계어가 있다면 그것을 재사용하기때문에 시간과 리소스가 절약된다고 한다.

결론

자바스크립트는 인터프리터 언어이면서 동시에 JIT로 컴파일된 언어라고 할 수 있다...

(추가 예정..)

profile
개발괴발

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

훌륭한 글 감사드립니다.

답글 달기