1. 개념
- 컴파일은 인간이 이해할 수 있는 언어로 작성된 소스 코드(고수준 언어 : C, C++, Java 등)를 CPU가 이해할 수 있는 언어(저수준 언어 : 기계어)로 번역(변환)하는 작업을 말한다.
- 컴퓨터는 0과 1 밖에 모른다. 그런데 사람이 00110101 이렇게 코딩을 하긴 매우 어렵다. 그래서 프로그래밍 언어라는 것을 만들어서 사람이 이해할 수 있는 방법으로 개발을 하게 만들었다.
- 우리가 흔히 고급언어라고 부르는 Python, Java, JavaScript 등등은 영어와 매우 흡사해서 사람이 코딩을 할 수 있게 해준다. 그런데 컴퓨터가 이 고급언어들을 바로 이해할 수 없다. 앞서 언급했듯이 컴퓨터는 0,1 밖에 이해할 수 없다. 그렇다면 우리가 고급언어로 작성한 것을 0,1(기계어)로 변환해주어야 하는데, 이런 번역기 역할을 하는 것이 컴파일러다.
- 즉, 컴파일러란 고급언어를 기계어로 번역해주는 번역기다.
2. 컴파일러의 종류
- 번역기에도 한국어 -> 영어 한영번역기, 영어 -> 한국어 영한번역기 이렇게 종류가 있듯이 컴파일러도 종류가 있다.
- 아래 그림은 컴파일러 종류와 입력값으론 어떤 값을 받고 출력값으로 어떤 결과를 내는지를 간단히 표현한 그림이다.

1) 프리프로세서(전처리기)
- 프리프로세서(전처리기)라는 이름에서 유추해볼 수 있듯이 프리프로세서는 실제 코드를 컴파일하기 전에 사전 준비작업을 수행하는 컴파일러다.
- 예를 들어 C 언어로 코드를 작성할 경우 header file을 정의하여 함수 정의나 매크로 정의를 하여 여러 source file에서 사용할 수 있게 할 수 있는데,프리프로세서가 이 header file 부분을 실제 source code로 대체해주는 등의 사전작업을 진행하게 된다. (헤더 파일에 내가 만든 함수들을 정리해 놓음으로써 관리 및 사용하기 쉬워진다.)
#include <stdio.h>는 standard input output, 즉, 표준 입출력을 의미하는데 c언어에서 제공하는 헤더파일이다. stdio.h 헤더 파일을 사용한 이유는 printf 함수를 사용하기 위함이다. 즉, stdio.h 파일 내에 printf 함수가 정의되어 있는 것이다.
- 본인이 직접 원하는 기능을 헤더 파일로 만들어서 사용할 수 있다.
2) 인터프리터
- 인터프리터는 고급언어를 한줄씩 번역해서 실행결과를 바로 출력하는 컴파일러다. 컴파일러가 번역기라면 인터프리터는 통역기인 셈.
- 예를 들어 아래와 같은 JavaScript 예시 코드가 있다고 가정하면 한줄씩 실행하고 결과를 바로 출력한다.