
C, C++, Java 프로그래밍을 해봤으면 작성한 소스 코드를 빌드(Build) 혹은 컴파일(Compile)해서 실행해봤거나 코드를 잘못 작성하여 컴파일 에러가 났던 경험이 있을 것이다.
그래서 컴파일을 알아보고 그에 반대되는 인터프리터 언어까지 알아보자
컴파일이란?
컴파일은 인간이 이해할 수 있는 언어(고수준 언어)로 작성된 소스코드를 CPU가 이해 할 수 있는 언어(저수준 언어)로 번역(변환)하는 작업을 말한다
컴파일 과정

컴파일 과정은 4가지 단계를 거친다
전처리 -> 컴파일 -> 어셈블리 -> 링킹
이 4가지 단계를 묶어서 컴파일 과정, 빌드 과정이라고 부르기도 하고 컴파일 과정, 링킹과정 따로 나눠서 부르기도 한다
전처리 과정

전처리(Pre-processing) 과정은 전처리기(Preprocessor)를 통해 소스 코드 파일(*.c)을 전처리된 소스 코드 파일(*.i)로 변환하는 과정이다.
이 과정에서 대표적으로 세 가지 작업을 수행한다.
- 주석 제거 : 소스 코드에서 주석을 전부 제거한다. 주석은 사람들이 알아볼 수 있게 남긴 내용이지 컴퓨터가 알 필요는 없기 때문이다.
- 헤더 파일 삽입 : #include 지시문을 만나면 해당하는 헤더 파일을 찾아 헤더 파일에 있는 모든 내용을 복사해서 소스 코드에 삽입한다. 즉, 헤더 파일은 컴파일에 사용되지 않고 소스 코드 파일 내에 전부 복사된다. 헤더 파일에 선언된 함수 원형은 후에 링킹 과정을 통해 실제로 함수가 정의되어 있는 오브젝트 파일(컴파일된 소스 코드 파일)과 결합한다.
- 매크로 치환 및 적용 : #define 지시문에 정의된 매크로를 저장하고 같은 문자열을 만나면 #define 된 내용으로 치환한다. 간단하게 말해 매크로 이름을 찾아서 정의한 값으로 전부 바꿔준다.
컴파일 과정

컴파일(Compilation) 과정은 컴파일러(Compiler)를 통해 전처리된 소스 코드 파일(*.i)을 어셈블리어 파일(*.s)로 변환하는 과정이다.
이 과정에서 우리가 일반적으로 컴파일하면 생각하는 언어의 문법 검사가 이루어진다. 또한 Static한 영역(Data, BSS 영역)들의 메모리 할당을 수행한다.
여기서 컴파일 과정을 거친 후부터 기계어라고 한다
텍스트 파일을 열어보면 파일이 외계어 처럼 깨져보인다
인터프리터 언어란?
코드를 한 줄씩 읽어 내려가며 실행하는 방식의 언어 라고 함
- 중간 단계 없음: 컴파일 과정이 없으므로, 코드를 수정하고 바로 실행가능
- 플랫폼 독립성: 소스 코드만 있으면 인터프리터가 설치된 어떤 운영체제(Windows, Linux, macOS 등)에서도 동일하게 실행
- 동적 타이핑: 실행 시점에 변수의 타입을 결정하는 경우가 많아 코딩이 자유롭고 유연하다
컴파일 언어와 인터프리터 언어 핵심 차이
| 구분 | 컴파일 언어 | 인터프리터 언어 |
| 번역 단위 | 소스코드 전체를 한꺼번에 번역 | 코드를 한 줄씩 읽으며 즉시 실행 |
| 실행 방식 | 목적파일 생성 | 별도의 실행 파일 생성 안함 |
| 실행 속도 | 매우 빠름(이미 번역된 파일 실행) | 상대적으로 느림(실행 시마다 번역) |
| 수정 / 디버깅 | 코드 수정 후 다시 컴파일 필요 | 코드 수정 후 즉시 확인 가능 |
| 대표언어 | C, C++, Rust, Go | Python, JavaScript |
자바에서의 컴파일
자바에서 컴파일은 일반적인 컴파일 언어들과는 다르게 2단계 구조를 가진다
단순히 기계어로 바꾸는 것이 아니라 어떤 운영체제에서도 실행될 수 있도록 중간단계를 만드는 과정이 핵심이다
1단계 : 자바 컴파일러(javac)
- 우리가 작성한 .java 소스코드를 자바 바이트코드인 .class.로 변환
- 이 바이트 코드는 컴퓨터가 바로 읽을 수 있는 기계어가 아니라 JVM(자바 가상머신)이라는 프로그램이 이해 할 수 있는 중간어어
2단계 : JVM의 인터프리터 & JIT 컴파일러
- 프로그램을 실행할 때, JVM이 .class파일을 읽어서 해단 운영체제가 이해할 수 있는 진짜 기계어로 바꾸어 실행함
자바에서 컴파일 이란 인간의 언어(java.c)를 가상 머신이 이해하는 언어(.class, 바이트 코드)로 번역하는 과정을 의미
'자기개발' 카테고리의 다른 글
| 전혀 우아하지 않은... 우아하지 않았던... (1) | 2026.01.17 |
|---|---|
| DevFest 후기 (1) | 2025.12.07 |