인터프리터 언어의 관점에서 정리했습니다.
인터프리터 언어란 개발자가 작성한 코드들을 기계어로 변환하는 과정 없이 런타임에 한 줄 한 줄 해석하며 바로 명령어를 실행하는 언어를 말합니다.
컴파일 언어는 개발자가 작성한 코드들을 모두 기계어로 변환 후 실행하는 언어를 말합니다.
컴파일이란 인간이 작성한 프로그래밍 언어를 컴퓨터가 이해할 수 있는 언어로 변환시켜주는 작업입니다. 예를 들어, C언어에서 javascript의 console.log()와 같은 비슷한 기능을 하는 printf() 함수를 실행시키면, 컴퓨터가 이해할 수 있는 01010010110과 같은 binary code로 변환하는 걸 컴파일이라고 합니다.
function sum() {
let answer = 0;
for (let i = 1; i <= 10; i++) {
answer += i;
}
return answer;
}
sum();
sum();
sum();
위의 코드가 인터프린터 언어로 작동했을 때 다음과 같은 코드를 실행시킨다면, 한 줄 한 줄 실행하면서, sum 함수 내부에서 1부터 10까지 i 변수가 돌고 55임을 계산합니다.
sum(); // 1부터 10까지 실행 후 55 계산
sum(); // 1부터 10까지 실행 후 55 계산
sum(); // 1부터 10까지 실행 후 55 계산
컴파일 언어로 작동했을 때, 컴파일을 마치고 생성된 실행파일을 실행한다면 sum() 함수의 내부의 값이 계산이 된 55임을 알고 있어 바로 55임 알고있을겁니다.
sum(); // 55
sum(); // 55
sum(); // 55
현대의 javascript는 Chrome의 V8 엔진 내부에서 컴파일 과정을 거치면서 인터프리터의 단점인 성능 개선을 비약적으로 향상시킬 수 있었습니다.
이를 통해 인터프리터 언어의 장점인 동적 기능 지원과 실행 속도가 느린 단점을 극복해 현재는 컴파일러와 인터프리터의 기술적 구분이 모호해져 가는 추세입니다.
따라서 정리하자면, 인터프리터 언어임과 동시에 내부 엔진에서 컴파일 과정을 거치는 언어라고 할 수 있습니다.