컴파일러 vs 인터프리터 vs JIT: 차이점 설명

소스 코드를 실행하는 주요 방법은 세 가지입니다. 컴파일러(AOT, 사전 컴파일)는 실행 전에 프로그램 전체를 기계어 코드로 변환합니다. 인터프리터는 별도의 기계어 파일을 만들지 않고 프로그램을 실행하면서 읽고 수행합니다. JIT(just-in-time) 컴파일러는 처음에는 인터프리트하다가 프로그램이 실행되는 동안 자주 쓰이는 부분을 기계어 코드로 컴파일합니다. 많은 언어가 이 방식들을 혼합합니다.

비교 항목컴파일러(AOT)인터프리터JIT 컴파일러
코드 변환 시점실행 전: 프로그램 전체가 기계어 코드가 됨실행 중: 프로그램을 한 단계씩 읽고 실행실행 중: 자주 쓰이는 코드를 기계어 코드로 컴파일
시작빠르게 시작(단, 먼저 빌드 단계 필요)빌드 단계 없이 빠르게 시작처음에는 느리며 코드가 워밍업될 때까지 지속
실행 속도가장 빠르고 가장 예측 가능가장 느리며 컴파일된 코드보다 몇 배나 느린 경우가 많음워밍업 후에는 컴파일 속도에 근접하며, 실행 시점 정보를 활용해 더 빠를 때도 있음
이식성플랫폼마다 바이너리 필요이식 가능: 인터프리터가 있는 곳 어디서나 실행이식 가능한 바이트코드와 플랫폼별 런타임
오류 검출많은 오류를 컴파일 시점에 잡음문제의 줄이 실행될 때 오류가 나타남언어에 따라 다름
메모리 사용실행 시점 오버헤드가 낮음인터프리터 자체가 메모리에 상주컴파일러와 컴파일된 코드 캐시를 위한 추가 메모리
개발 사이클편집, 빌드, 실행편집 후 즉시 실행보통 편집 후 실행, 또는 바이트코드로 빌드
예시 언어C, C++, Rust, Go기본 Python(CPython), Ruby, 셸 스크립트Java(HotSpot), JavaScript(V8), C#(.NET), PyPy

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

컴파일러
운영체제, 게임, 임베디드 펌웨어처럼 성능, 작은 크기, 예측 가능한 동작이 중요할 때.
인터프리터
빠른 실험, 스크립팅, 학습처럼 속도보다 빠른 개발이 중요할 때.
JIT
웹 브라우저와 서버 애플리케이션처럼 이식 가능한 플랫폼에서 속도가 필요한 장시간 실행 프로그램.

자주 묻는 질문

Python은 컴파일 언어인가요, 인터프리터 언어인가요?

표준 구현인 CPython은 소스 코드를 바이트코드로 컴파일한 뒤 이를 인터프리트합니다. PyPy 같은 다른 구현은 더 빠른 속도를 위해 JIT 컴파일러를 추가합니다.

Java는 컴파일 언어인가요, 인터프리터 언어인가요?

둘 다입니다. Java는 사전에 바이트코드로 컴파일되고, JVM이 프로그램 실행 중에 이를 인터프리트하고 기계어 코드로 JIT 컴파일합니다.

컴파일된 코드가 더 빠른 이유는 무엇인가요?

프로그램 전체가 실행 전에 최적화된 기계어 코드로 변환되므로, 실행 시점에 인터프리트할 것이 없기 때문입니다.

JIT 컴파일러의 워밍업이란 무엇인가요?

처음에는 프로그램이 인터프리터에서 실행되고, JIT는 코드가 자주 실행되는 것을 확인한 뒤 그 핫 코드를 컴파일합니다. 그때까지는 속도가 낮습니다.

주요 용어 설명

JITコンパイル
プログラムの実行中に、よく実行される部分を機械語にコンパイルする方式。実行時の情報を使った最適化ができる。JavaやJavaScriptの実行環境などで使われる。

관련 비교