Contents

Interpreter VS Compiler_Language

Interpreter VS Compiler_Language

web 개발을 하다보면 javascript를 공부하게 되고, javascript를 공부하다보면, 어려워지죠ㅎ.

더 어려워 지기 전에 기초적인 지식?인 인터프리터 언어와 컴파일 언어의 특징과 차이에 대하여 알아봅시다!

뜬금없이 프로그래밍 언어란 무엇인지 우선 알아봅시다.

컴퓨터는 이진수만 이해할 수 있습니다. 즉 컴퓨터는 우리가 사용하는 언어가 아닌 ‘0’, ‘1’만 이해합니다.

근데 이게 프로그래밍 언어랑 무슨 상관일까요? 상관이 아주 많습니다…ㅎ.. 프로그래밍 언어로 프로그램을 만들고 실행 할 때 우리는 ‘0’, ‘1’ 같은 명령어로 코딩을 하지 않습니다. 도대체 우리가 영어로 작성한(C, java, python 등등) 코딩을 어떻게 컴퓨터가 이해하고 실행하는 것일까요?

모든 프로그래밍언어는 그 프로그래밍 언어를 기계어 명령어로 번역해 줄 번역기가 존재합니다. 그리고 그 번역기가 영문으로 된 프로그래밍 언어(사람이 이해하기 쉬운 언어를 고급 언어라고 부릅니다.)를 ‘0’, ‘1’로(기계어 명령어) 번역해줍니다.

추가로 누구나, 프로그래밍 언어를 배울 때 환경 설정을 하게 됩니다. 예를 들어 자바라면 JDK를 설치하고, 파이썬이라면 파이썬을 설치하고, C라면 gcc와 같은 프로그램을 설치합니다. 여러분이 프로그래밍 언어를 배우기 위해 환경 설정 할 때 설치했던 바로 그 개발환경설정 툴 중에 이 번역기가 반드시 포함되어 있습니다.

*근데 번역기는 번역 시기에 따라 크게 인터프리터 언어컴파일러 언어로 구분합니다.

Interpreter_Language(인터프리터 언어)

  • 고급 언어로 작성된 소스코드 명령어들을 한번에 한 줄씩 읽어들여서 실행하는 언어.

  • javascript, HTML, SQL, python, R, ruby 등

고급 언어를 한 줄씩 중간 코드(intermediate code)로 변환하고 이를 각 행마다 실행합니다.

100줄의 명령어(==소스파일)가 있으면, 100번 실행합니다. 즉, Runtime상황에서는 한 줄씩 실시간으로 읽어서 실행하기 때문에 컴파일 언어에 비해 속도가 느립니다.

But 실행속도는 느리지만 코드 변경시 빌드 과정없이 바로 실행이 가능하다는 장점이 있습니다. javascript를 사용해보면 소스코드를 고치고 서버를 다시 시작하지 않아도 변경사항이 반영된 상태로 테스트를 진행할 수 있습니다. 또한 명령어을 잘못 입력해도 바로바로 수정할 수 있습니다.

또한 실행중에 발생한 에러가 각 행(row)별로 전달되는데, 에러 이후 작성된 코드는 확인하지 않습니다. 이는 보안적인 관점에서 도움이 됩니다.

Compiler_Language(컴파일러 언어)

  • 고급 언어로 작성된 소스코드 명령어들을 모두 모아 기계어로 번역(build) 하고 이를 실행하는 언어.

    build ?

    build는 소스파일을 실행파일로 생성하는 과정입니다.

    즉, 고급언어 => (변환) => 저급언어(기계어) 과정을 거쳐서 실행파일로 생성해 구동합니다.

  • C, C++. C# 등.

소스코드를 기계어로 번역하는 빌드 과정에서는 인터프리터 언어에 비해 시간이 소요됩니다.

하지만 Runtime상황에서는 이미 기계어로 모든 소스코드가 변환되어 있기 때문에 빠르게 실행할 수 있습니다.

메모리도 많이 차지합니다.