HuSpIn

컴파일러와 인터프리터의 특징 본문

IT 따라잡기/프로그램과 프로그래밍 언어의 이해

컴파일러와 인터프리터의 특징

E_Dev 2024. 4. 8. 23:51
프로그래밍 언어는 우리가 작성한 소스 코드(Source Code)를 컴퓨터가 이해할 수 있는 기계어로 번역되는 과정을 수행하게 된다.
이 과정은 프로그래밍 언어에 따라 컴파일러(Compiler) 과정을 수행하는 언어와 인터프리터(Interpreter) 과정을 수행하는 언어로 나눌 수 있다.

1. 컴파일 언어란?

컴파일 언어(Compile Language)는 프로그래머가 작성한 소스 코드(원시 코드)를 모두 기계어로 변환한 후에 디바이스(JVM 같은 가상 머신)에 넣고 기계어 코드를 실행한다.

소스 코드를 기계어로 변환하는 빌드 과정에서는 인터프리터 언어에 비해 시간이 소요되는 단점이 있다. 하지만 런타임(Runtime) 상황에서는 이미 기계어로 모든 소스 코드가 변환되어 있기 때문에 빠르게 실행할 수 있는 장점을 가지고 있다. 대표적인 언어로 C, C++가 있다.

컴파일 그림 예제

 

2. 인터프리터 언어란?

인터프리터 언어(Interpreter Language)는 프로그래머가 작성한 소스 코드(원시 코드)를 기계어로 변환하는 과정 없이 한줄 한줄 해석하여 명령어를 실행하는 언어를 말한다.

R, Python, Ruby와 같은 언어들이 대표적인 인터프리터 언어이다.

인터프리터가 직접 한 줄씩 읽고 따로 기계어로 변환하지 않기 때문에 빌드 시간이 거의 발생하지 않는다.

런타임(Runtime) 상황에서는 한 줄씩 실시간으로 읽어서 실행하기 때문에 컴파일 언어에 비해 속도가 느린 단점을 가지고 있다.

반면, 실행속도는 느리지만 코드 변경 시 빌드 과정 없이 바로 실행이 가능하다는 장점이 있다.

인터프리터 그림 예제

 

3. 빌드 과정이란?

빌드(Build)는 소스 코드 파일(Source File)을 실행파일로 생성하는 과정으로 컴파일(Compile)과 링크(Link)를 합쳐서 부르는 용어이다.

즉, 고급 언어을 빌드하면 저급 언어(기계어)로 변환하는 과정을 거친 후 실행 파일로 생성된다.

일반적으로 컴파일의 결과는 '.exe' 파일로 나타나는데, 어셈블리어로 작성한 asm 파일의 경우에는 컴파일의 결과가 exe 파일이 아닌 obj 파일이다.

이때, obj 파일들을 연결해서 하나의 exe 파일을 만드는 작업을 링크라고 부르고, 이 동작을 수행하는 프로그램을 링커라고 한다.

이렇게 각각의 컴파일과 링크 작업으로 생성되는 최종 실행 파일(.exe file)의 생성 작업을 총칭해서 빌드라고 한다.

반면, 인터프리터 언어는 빌드 과정 없이 바로 고급 언어에서 한줄씩 읽어서 실행한다.

빌드의 그림예제

 

4. 컴파일러 과정과 인터프리터 과정의 특징

컴파일러는 실행 이전에 전체 코드를 한번에 기계어로 번역하는 과정을 수행한다.

그 결과 오브젝트 파일을 생성하게 된다. 컴파일러의 특징으로는 실행 전에 컴파일러에 의해 생성된 오브젝트 파일을 이용해서 프로그램을 실행하기 때문에 실행 속도가 빠른 장점을 가지고 있다.

그러나 에러(Error)가 한 곳 이라도 있으면 컴파일에 실패하여 프로그램을 실행시킬 수 없다.

반면에 인터프리터는 실행 이후에 한 줄씩 번역되기 때문에 오브젝트 파일을 생성하지 않는다.

인터프리터의 특징으로는 실행할 때마다 한 줄씩 번역을 진행하기 때문에 컴파일 언어에 비해 실행 속도가 느리다.

하지만 프로그램 어딘가에 에러(Error)가 있더라도 실행이 가능하다. 그래서 한 줄씩 코드가 명령하는 바를 수행하다가 에러를 만나면 멈추게 된다.

컴파일과 인터프리터의 차이