Language/Programming Language

컴파일러와 인터프리터에 대해 알아보자

컴파일러와 인터프리터는 왜 사용하는 걸까?

컴파일러와 인터프리터에 대해 자세히 알아보기 전에 이것들을 왜 사용하는지부터 알아보도록 하자.

 

컴퓨터는 0과 1밖에 모른다는 말을 많이 들어봤을 것이다.

물론 사실이고 이는 컴퓨터가 알아들을 수 있는 유일한 신호이다.

컴퓨터가 알아들을 수 있는 언어를 우리는 기계어라고 부른다.

먼 옛날에는 이 기계어로 프로그램을 작성했었다. 물론 지금도 이 0과 1로 코딩을 하시는 분들이 계신다.

 

우리가 프로그래밍을 할 때 사용하는 언어들, 예를 들면 C언어, C++, C#, Java, Python 등등.. 이것들을 고급 언어라고 부른다.

우리가 알고 있는 가장 기초적인 프로그래밍에는 화면에 "Hello, World!"를 출력하는 프로그램이 있다.

그렇다면 C언어로 작성된 printf("Hello, World!");라는 코드를 컴퓨터는 어떻게 알고 화면에 출력해주는 걸까?

컴파일러와 인터프리터가 없었다면 컴퓨터는 알아듣지 못했을 것이다.

 

컴파일러와 인터프리터는 인간이 쉽게 사용할 수 있는 고급 언어로 짜인 코드를 컴퓨터가 알아들을 수 있는 기계어로 번역시켜준 후 해당 코드를 실행시켜주는 역할을 한다. 즉 사람과 컴퓨터 사이의 통역사라고 볼 수 있다.

통역사가 없다면 서로의 말을 알아들을 수 없듯이 컴파일러나 인터프리터가 없다면 컴퓨터는 우리가 짠 코드를 알아들을 수 없다.

 

 


컴파일러와 인터프리터는 어떻게 다를까?

컴파일러(Compiler)인터프리터(Interpreter)는 고급 프로그래밍 언어를 기계어로 번역시켜준다는 면에서 공통점을 가지고 있다. 하지만 두 번역기는 서로 다른 점들이 많고 각각 장단점이 있기 때문에 특성을 잘 파악한 후에 사용하는 것이 좋다.

 

우리가 작성한 코드를 실행하면 내부적으로는 컴파일러가 컴파일(compile) 또는 인터프리터가 해석(Interpret)한다.

같은 번역 개념이지만 컴파일러는 소스코드 전체를 한 번에 번역한 후 실행하는 반면에 인터프리터는 한 라인(줄)씩 읽어 들이면서 수행한다. 따라서 인터프리터를 라인 인터프리터(Line Interpreter)라고 부르기도 한다.

 

이 과정에서 프로그램에 잘못된 부분이 있으면 번역기는 에러를 발생시킬 것이다.

컴파일러같은 경우는 소스코드 전체를 번역하는 과정에서 에러가 발생하기 때문에 프로그램이 수행되지 않는다.

하지만 인터프리터는 한 줄씩 읽어나가다가 에러가 발생하면 프로그램이 종료되기 때문에 에러가 발생하기 전까지의 코드들은 수행이 된다.

 

번역 속도는 코드 전체를 번역하는 컴파일러보다 한 줄씩 읽어서 수행하는 인터프리터가 더 빠르다.

 

컴파일러가 성공적으로 컴파일에 성공했을 경우에는 다음에 같은 프로그램을 실행할 때 컴파일 과정을 다시 거치지 않아도 되는 반면에 인터프리터는 실행할 때마다 번역을 수행한다. 때문에 실행 속도는 컴파일 방식에 비해 느리다.

 

또한 컴파일러는 하드웨어에 종속성이 강하기 때문에 어떤 컴퓨터에서 수행했던 실행 파일을 다른 컴퓨터에서는 수행되지 않을 수 있다. 반면에 인터프리터는 코드를 번역할 때 수행하는 하드웨어의 환경에 맞게 변환을 하기 때문에 하드웨어와의 종속성을 따로 고려하지 않아도 된다.

 

요약하자면 아래와 같다.

  컴파일러 (Compiler) 인터프리터 (Interpreter)
번역 방식 소스코드 전체를 한 번에 번역 한 라인(줄)씩 읽어들이면서 번역
번역 속도 느리다 빠르다
실행 속도 빠르다 느리다
종속성 플랫폼(하드웨어)에 종속적 플랫폼(하드웨어)에 종속적이지 않음
대표 언어 C, C++, C# 등.. 파이썬, JS, R, Ruby 등..