파이썬 - 파이썬과 자바에서의 컴파일 개념 정리 – 기초부터 명시적 컴파일까지
파이썬과 자바에서의 컴파일 개념 정리 – 기초부터 명시적 컴파일까지
프로그래밍을 처음 배울 때 가장 헷갈리는 개념 중 하나가 바로 **“컴파일”**이다. “코드를 작성했는데 왜 컴파일을 해야 하지?”, “파이썬은 컴파일 안 해도 되는 거 아닌가?”라는 의문이 들 수 있다. 이 글에서는 컴파일의 개념부터 파이썬과 자바에서의 차이점, 그리고 ‘명시적 컴파일’이 무엇인지까지 정리해본다.
1. 컴파일이란?
**컴파일(compile)**은 사람이 작성한 코드를 컴퓨터가 이해할 수 있는 형태로 변환하는 과정이다.
- 우리는
print("Hello")
처럼 사람이 이해할 수 있는 코드를 작성한다. - 하지만 컴퓨터는 0과 1로 이루어진 기계어만 이해한다.
- 그래서 이 사이를 잇는 것이 바로 컴파일러다.
컴파일의 결과는?
- 바이트코드 (Java)
- 기계어(머신코드) (C, C++)
- 인터프리터용 중간 코드 (Python의 .pyc)
2. 파이썬과 자바는 실행 구조가 다르다
✅ Java
Hello.java ──[javac]──▶ Hello.class (바이트코드) ──▶ JVM이 실행
javac
명령어로 명시적 컴파일 필요.class
파일이 만들어지고, JVM(Java Virtual Machine)이 실행
✅ Python
hello.py ──▶ 인터프리터가 자동으로 .pyc 파일 생성 ──▶ 실행
- 사용자가 명시적으로 컴파일할 필요 없음
- 실행하면서 자동으로 바이트코드(.pyc)를 생성하고 실행
3. 컴파일 시점과 사용자의 개입 차이
항목 | Java | Python |
---|---|---|
컴파일 시점 | 실행 전에 명시적으로 수행해야 함 | 실행 중 자동으로 수행됨 |
사용자 개입 | javac Hello.java 직접 호출 필요 |
python hello.py 만 입력하면 됨 |
실행 전 준비 | .class 파일을 만들어야 실행 가능 |
.py 파일만 있어도 바로 실행 가능 |
→ 이처럼 파이썬은 사용자가 컴파일 과정을 의식하지 않아도 되지만, 자바는 실행 전에 반드시 개발자가 개입해 컴파일해야 한다.
4. 명시적 컴파일이란?
명시적 컴파일이란, 사용자가 직접 컴파일 명령어를 실행해서 코드 변환을 수행하는 것이다.
예시:
- Java:
javac Hello.java # 명시적 컴파일
java Hello # 실행
- Python:
python hello.py # 실행 = 컴파일 + 실행을 자동으로 처리
→ 파이썬에서도 compile()
, py_compile
등을 통해 명시적 컴파일이 가능하지만, 일반적으로는 사용자가 의식하지 않아도 된다.
5. IDE를 쓸 때는 왜 체감이 안 될까?
IntelliJ, Eclipse, PyCharm 같은 개발 도구(IDE)는 자동으로 컴파일 & 실행을 처리해준다.
그래서 초보자는 javac
와 같은 명령어를 직접 입력하지 않더라도 실행이 잘 되는 것처럼 느껴진다.
하지만 내부적으로는 자바는 항상 명시적으로 컴파일 → 실행 구조, 파이썬은 암묵적으로 컴파일하며 바로 실행하는 구조다.
6. 정리
구분 | Java | Python |
---|---|---|
언어 방식 | 정적 타입, 컴파일 언어 | 동적 타입, 인터프리트 언어 |
실행 전 컴파일 필요 | ✅ 반드시 필요 (javac ) |
❌ 필요 없음 (자동 처리) |
명시적 컴파일 | ✅ 사용자가 직접 수행 | ❌ 내부에서 자동 수행 |
실행 구조 | 소스 → 바이트코드 → JVM 실행 | 소스 → 자동 바이트코드 → 실행 |
개발자 개입 | 컴파일 명령어 입력 필요 | python file.py 한 줄로 충분 |
마무리
프로그래밍 언어마다 컴파일 방식과 시점, 그리고 개발자가 개입해야 하는 정도는 크게 다르다. 자바는 명시적으로 컴파일을 거쳐야 하는 언어, 파이썬은 자동으로 컴파일되고 곧바로 실행되는 언어라는 점을 기억해두면 좋다.
이 차이를 이해하면 언어마다 어떤 방식으로 개발 환경이 구성되고 실행되는지를 훨씬 더 명확하게 이해할 수 있다.
댓글남기기