파이썬(CPython)은 컴파일과 인터프리팅을 모두 수행하는 언어이다.
이를 이해하기 위해 컴파일(Compile), 바이트코드(Bytecode), 인터프리팅(Interpreting) 개념을 살펴보자...
컴파일이란 프로그래밍 언어로 작성된 코드를 기계어로 변환하는 과정을 말한다.
즉, 사람이 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 변환하는 것이라고 볼 수 있음.
| 구분 | 설명 | 대표적인 언어 |
|---|---|---|
| 컴파일 언어 | 전체 코드를 한 번에 번역하여 실행 파일(기계어) 생성 | C, C++, Java(부분적으로) |
| 인터프리터 언어 | 한 줄씩 읽고 즉시 실행 | Python, JavaScript |
예를 들어, C 언어에서는 gcc 같은 컴파일러(Compiler)가 전체 코드를 번역하여 .exe 같은 실행 파일을 만들고, 이 파일을 실행하면 CPU가 직접 기계어를 실행하므로 속도가 빠르다.
// C 언어 예제 (컴파일 필요)
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
(위 코드는 gcc 컴파일러를 사용하여 기계어로 변환된 실행 파일을 만들어야 실행할 수 있음)
바이트코드는 CPU가 직접 실행할 수 없는 중간 코드(Intermediate Code)이다.
즉, 완전한 기계어가 아니며, 특정 가상 머신(Virtual Machine)이 실행할 수 있도록 변환된 코드인 것.
파이썬은 다음과 같은 단계를 거쳐 실행됨.
1. .py 소스 코드를 바이트코드(.pyc)로 변환 → (컴파일 단계)
2. 바이트코드를 인터프리터(PVM, Python Virtual Machine)가 실행 → (인터프리팅 단계)
# Python 코드 예제
print("Hello, World!")
위 코드를 실행하면, CPython은 내부적으로 바이트코드를 생성하고 이를 실행.
바이트코드 파일(.pyc)은 __pycache__ 폴더에 저장될 수 있음.
아.... pycache 안에 있던 pyc가 그거구나...
__pycache__/
my_script.cpython-310.pyc
💡 즉, 바이트코드는 기계어가 아니라, 파이썬 인터프리터(PVM)가 이해할 수 있는 중간 코드!
인터프리팅이란 코드를 한 줄씩 읽고 바로 실행하는 방식 (직독직해)
파이썬 인터프리터(CPython)는 바이트코드를 실행하는 역할을 함.
REPL 환경 사용 가능).Read (읽기) → 사용자의 입력을 읽음
Eval (평가) → 입력된 코드를 실행 (평가)
Print (출력) → 실행 결과를 출력
Loop (반복) → 위 과정을 계속 반복
즉, REPL은 터미널에서 바로 실행할 수 있는 인터랙티브 코드 실행 환경
# Python 인터프리터 사용 예시
>>> print("Hello, World!")
Hello, World!
위 코드가 실행되면, CPython 인터프리터가 바이트코드로 변환한 후 이를 실행함.
CPython은 컴파일과 인터프리팅을 결합한 방식을 사용합니다.
.py 파일을 바이트코드(.pyc)로 변환파이썬 코드 실행 흐름
Python 코드 (.py) ↓ ① 컴파일 (바이트코드 변환) 바이트코드 (.pyc) ↓ ② 인터프리팅 (PVM 실행) 실행 결과 출력
✔ 컴파일(Compile): 코드를 기계어로 변환하는 과정
✔ 바이트코드(Bytecode): 기계어와 인터프리팅의 중간 단계 코드
✔ 인터프리팅(Interpreting): 바이트코드를 한 줄씩 읽어 실행하는 과정
✔ CPython은 컴파일 + 인터프리팅을 동시에 수행하는 방식으로 동작
즉, 파이썬은 인터프리터 언어지만, 실행 전에 바이트코드로 변환하는 일종의 컴파일 과정을 거친다