- Published on
컴파일 언어 vs 인터프리터 언어
컴퓨터는 0과 1, 2진수로만 이루어져 있다. 그러나 컴퓨터 프로그램을 개발하는 개발자들은 0과 1로만 개발하지 않는다. 가독성의 한계, 복잡한 로직을 구현하기 위한 불편함등의 문제가 있다.
선대 엔지니어들의 시행착오 끝에 다음의 방식으로 현대 프로그램 개발 방식이 최적화되었다.
"프로그래밍 언어"를 사용하여 "코드"를 작성하고 "코드"를 해석하여 "컴퓨터 프로그램"을 구동시킨다.
각각의 언어들은 자신들이 정한 규칙에 맞게 해당 "코드"들을 "머신 코드", "기계어"로 변경한다.
따라서, 프로그래머가 작성한 코드들은 모두 "프로그래밍 언어"로 구성되어 있다. 기술이 발달함에 따라 다양한 분야에서 전자기기가 활용되어졌고, 해당 분야마다 특화된 기기 스펙이 요구되었다. 다양한 분야의 요구사항을 충족시키기 위해 프로그래밍 언어 또한 다양하게 분화되었고, 다양한 언어들이 공존하고 있다. 다양한 프로그래밍 언어들은 활용되어지는 분야만큼 다양한 방식으로 구분되어진다. 해당 글에서는 "빌드 방식"을 중심으로 구분되는 2가지 방식, [[컴파일 언어]]와 [[인터프리터 언어]]로 나누어 알아보자.
컴파일 언어
프로그래머가 작성한 코드를 "컴파일" 이라고 부르는 과정을 거쳐서 동작하는 프로그램을 만드는 언어들을 컴파일 언어라고한다.
컴파일이란?
주어진 언어로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스
- MDN Web docs 참조
컴파일러란?
위 컴파일을 수행하는 프로그램
- MDN Web docs 참조
컴파일은 주로 C, Rust, Java등의 고급 언어들로 작성된 코드를 이진 코드 or 기계 코드라고하는 실행가능한 언어로 변환하는 과정을 일컬어 부른다. 또한 대부분의 컴파일러는 선행(AOT(Ahead-Of-Time)) 또는 적기(JIT(Just-In-Time))로 컴파일을 수행합니다.
컴파일 언어는 다음과 같은 특징을 지닌다.
- 프로그래머가 작성한 코드를 모두 기계어로 변환 후 기계어 코드를 실행
- 빌드 과정에서 인터프리터 언어에 비해 시간 소요: 프로그래머가 작성한 코드를 "모두" 변환 하고 기계어 코드로된 프로그램을 생성해야하기 때문에 당연히 오래걸린다.
- 런타임 상황에서는 이미 소스코드가 모두 이진 코드로 변환되어 있기에 빠름
- 프로그램 수정이 불편: 수정 후 다시 컴파일 해야 함
컴파일 언어는 컴파일러를 필수적으로 필요로 하고, 각 언어의 대표적인 컴파일러는 다음과 같다.
- gcc(GNU Compiler Collection): 대표적인 C, C++ 컴파일러. 사실상 표준 컴파일러. make, cmake와는 다르다.
- Rustc : Rust의 컴파일러
인터프리터 언어
인터프리터 언어는 컴파일 언어와 달리 "컴파일" 과정이 없으며, 프로그래머의 코드를 직접 1줄 1줄 해석하여 작업을 수행한다.
Python, JavaScript등이 있다.
기계어로 변환하지 않는다. = 런타임 상황에서 한 줄씩 읽는다.
- 프로그래머가 작성한 코드를 기계어로 변환하는 과정 없이 한 줄 한 줄 해석해서 바로 명령어를 실행하는 언어
- 기계어로 변환하지 않기 때문에 빌드 과정 없이 바로 실행 가능
- 런타임 상황에서는 한 줄씩 읽기 때문에 컴파일 언어에 비해 속도가 느림
- 프로그램 수정이 간단
인터프리터 언어는 컴파일러가 아닌 "인터프리터"가 필요하다. 인터프리터 언어로 유명한 JavaScript, Python언어의 인터프리터로는 다음이 있다.
- V8 engine: 구글에서 개발한 자바스크립트 엔진. 구글 크롬에 탑재되어있다.
- CPython: 가장 일반적으로 사용되는 파이썬 인터프리터. 파이썬 소스 코드를 C로 구현된 인터프리터에서 실행한다.
- PyPy: JIT(Just-In-Time) 컴파일을 사용하는 인터프리터. JIT 컴파일러를 사용하여 런타임 성능을 향상시킨다. CPython 보다 빠르지만, 몇몇 C 확장 모듈이 동작하지 않는다.
TL;DR
컴파일 언어와 인터프리터 언어의 동작하는 과정을 비교하면 다음과 같다.

- 컴파일 언어는 코드 전체를 한번에 검사/빌드 하고 구동시킨다.
- 인터프리터 언어는 한줄한줄 코드를 수행시킨다.
- 컴파일 언어가 수행되기 위해서는 인터프리터 언어보다 까다롭다. 허나 성능이 뛰어나다.