특정 프로그래밍 언어로 쓰여있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램이다. 원래의 문서를 source code
, 즉, 소스 코드, 원시 코드 라고 부르고, 출력된 문서를 object code
또는 object module
, 즉, 목적 코드, 목적 파일이라고 부른다. 이렇게 소스코드에서 목적코드로 옮기는 과정(기계어로 번역하는 과정)을 컴파일이라고 한다.
인터프리터는 고급 언어로 작성된 원시코드 명령어들을 한번에 한 줄씩 읽어들여서 실행하는 프로그램이다.
인터프리터는 다음의 과정 가운데 적어도 한 가지 기능을 가진 프로그램이다.
1. 소스코드를 직접 실행한다.
2. 소스 코드를 효율적인 다른 중간 코드로 변환하고, 변환한 것을 바로 실행한다.
3. 인터프리터 시스템의 일부인 컴파일러가 만든, 미리 컴파일된 저장코드의 실행을 호출한다.
일단 공통점은 C
또는 JAVA
같은 고레벨 언어의 프로그래밍 언어를 기계가 알아들을 수 있도록 변환하지만 그 과정에서 차이가 있다. 위에서 컴파일러와 인터프리터의 각 그림을 보였지만, 아래는 둘의 차이를 개략적으로 나타낸 그림이다. (Compiler의 Executable code는 목적 코드로 생각할 수 있다.)
컴파일러는 전체 소스코드를 보고 명령어를 수집하고 재구성하는 반면 인터프리터는 소스코드의 각 행을 연속적으로 분석하며 실행한다. 위 그림처럼 인터프리터는 중간형태로 변환 한다음 실행한다. 반면 컴파일러는 고레벨언어를 바로 기계어로 변환한다.
아래 표는 둘의 특징을 정리해놓은 표이다.
Compiler | Interpreter |
---|---|
소스코드 전체를 한 번 훑고 컴퓨터 프로세서가 실행할 수 있도록 기계어로 변환한다. | 고레벨 언어를 중간코드(Intermediate code)로 변환하고 이를 각 행마다 실행한다. |
전체 소스코드를 변환한 뒤 에러를 보고한다. | 실행하는 도중 에러가 보고되면 이후 작성된 코드를 살펴보지 않는다. |
빠르다. | 느리다. |
적은 시간이 걸린다. | 컴파일러보다 더 많은 시간이 걸린다. |
더 효율적이다. | 덜 효율적이다. |
C, C++ | Python |