개발을 하면서 한 번쯤은 들어봤을 컴파일러, 인터프리터, 그리고 JIT 컴파일러.
"이게 뭐가 다르지?", "왜 언어마다 방식이 다른 거야?"
처음엔 헷갈릴 수 있지만, 이 개념들을 이해하면 프로그래밍 언어의 동작 원리를 더 깊이 이해할 수 있습니다.
우리가 작성하는 코드는 사람이 읽기 쉬운 고수준 언어입니다. 하지만 컴퓨터는 0과 1로 이루어진 기계어만 이해할 수 있습니다.
그래서 우리가 작성한 코드를 기계어로 번역해주는 과정이 필요한데,
그 역할을 하는 것이 바로 컴파일러, 인터프리터, 그리고 JIT 컴파일러입니다.
컴파일러는 전체 소스코드를 한 번에 읽어서 기계어로 변환하는 프로그램입니다.
인터프리터는 코드를 한 줄씩 읽고 바로 실행하는 방식입니다.
JIT 컴파일러는 인터프리터와 컴파일러의 중간 형태입니다.
실행 시점에 코드를 분석하고, 자주 사용되는 부분만 선별적으로 컴파일해서 성능을 향상시킵니다.
| 구분 | 컴파일러 | 인터프리터 | JIT 컴파일러 |
|---|---|---|---|
| 실행 시점 | 실행 전 컴파일 | 실행 중 해석 | 실행 중 컴파일 |
| 처리 방식 | 전체 코드 분석 | 한 줄씩 해석 | 분석 후 일부 컴파일 |
| 실행 속도 | 빠름 | 느림 | 중간 ~ 빠름 |
| 예시 언어/엔진 | C++, Go | Python, Ruby | Java(JVM), JS(V8) |
| 생성물 | 실행 파일 | 없음 | 캐시된 기계어 코드 |