인터프리터 vs 컴파일러

Sean H.W. Lee
4 min readJun 21, 2021

--

Photo by Markus Spiske on Unsplash

오늘은 그 동안 다소 두루뭉술하게 알고 있던 인터프리터와 컴파일러에 대해 정리해 본다.

인터프리터

인터프리터란 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다.

소스코드 란?
컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 텍스트 파일을 말한다. 즉, 우리가 짜는 ‘코드’ 이다.

인터프리터는 다음과 같은 기능을 가진다. (모두 가질 필요는 없고, 이 중 일부만 가져도 된다)

  • 소스 코드를 직접 실행
  • 소스 코드를 다른 중간 코드로 변환하고, 변환한 코드를 실행
  • 인터프리터 시스템의 일부인 컴파일러가 미리 컴파일한 코드의 실행을 호출한다.

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

고급 언어 란?
사람이 이해하기 쉽게 작성된 프로그래밍 언어를 말한다. 컴파일러나 인터프리터에 의해 저급 언어로 번역되어실행되는데, C 언어나 자바처럼 우리가 프로그램을 만들 때 사용하는 대부분의 언어들이 고급 언어에 속한다.

일반적으로 고급 언어로 작성된 프로그램을 실행시키는 방법은 두 가지가 있다. 하나는 컴파일하는 것, 다른 하나는 인터프리터를 통과시키는 방법이다. 인터프리터는 고급 언어를 중간형태로 번역한 다음, 그것을 실행한다.

중간 형태?
기계어 보다는 추상적이면서, 소스 코드 보다는 덜 추상적이지만, 간결하고, 컴퓨터 중심적

기계어 란?
CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어의 통칭이다.

인터프리터의 장점은 기계어 명령어들이 만들어지는 컴파일 단계를 거칠 필요가 없다. 프로그램의 크기가 크면 컴파일 과정에 시간이 걸릴 수 있는데, 인터프리터는 고급 언어로 작성된 프로그램을 즉시 실행시킬 수 있다.

컴파일러

특정 프로그래밍 언어로 쓰여있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다.

여기서 특정 언어로 쓰여있는 문서를 소스코드, 다른 언어로 옮겨진 언어를 목적 코드로 볼 수 있는데 바로 이 목적 코드가 기계어이다. 따라서 소스 코드를 목적 코드로 옮기는 과정이 말 그대로 컴파일이다.

컴파일러는 소스 코드를 읽어서 즉시 결과를 출력하는 인터프리터와는 구분되지만, 현대에 들어 많은 인터프리터가 실시간 컴파일을 수행하므로, 컴파일러와 인터프리터 사이의 기술적 구분은 사라져가는 추세이다.

정리하면 소스 코드를 컴파일하는 이유는 사람이 이해하기 쉬운 고급 언어를 실행 가능한 기계어 프로그램을 만들기 위해서 이고, 이 과정에 필요한 것이 컴파일러이다.

간단하게 컴파일러의 등장 배경도 정리해 본다. 초기의 컴퓨터 프로그램들은 어셈블리어로 작성되었다. 하지만 각기 다른 CPU 의 등장마다 매번 같은 프로그램을 다른 어셈블리어로 작성해야하게 되면서 고급 언어의 필요성이 대두되었다. 때문에 프로그램 작성은 고급 언어로 하고, 이를 컴퓨터가 이해할 수 있는 언어로 컴파일해 줄 컴파일러가 등장하게 되었다.

어셈블리어 란?
기계어와 일대일 대응되는 저급 언어이다. 컴퓨터 구조에 따라 사용하는 기계어가 달라지는데, 이 때문에 각 기계어에 대응되어 만들어지는 어셈블리어도 각기 다르다. 기계어는 실제 CPU 가 읽어서 실행할 수 있는 0 과 1로 이루어져 있지만, 사람이 읽지는 못한다. 때문에 이러한 기계어를 각 명령어마다 사람이 알아보기 쉬운 기호를 정해 사람이 조금 더 쉽게 컴퓨터를 제어할 수 있도록 만든 것이 어셈블리어이다.

정리

JavaScript 는 별도의 컴파일 작업을 수행하지 않기 때문에 일반적으로 인터프리터 언어로 구분한다. 또한 대부분의 현대 자바스크립트 엔진(V8, SpiderMonkey 등)은 인터프리터와 컴파일러의 장점을 결합하여 비교적 처리 속도가 느린 인터프리터의 단점을 극복하고 있다.

Reference

https://ko.wikipedia.org/wiki/인터프리터

https://ko.wikipedia.org/wiki/고급_프로그래밍_언어

https://ko.wikipedia.org/wiki/컴파일러

https://ko.wikipedia.org/wiki/소스_코드

https://ko.wikipedia.org/wiki/기계어

https://ko.wikipedia.org/wiki/어셈블리어

--

--