컴파일 언어와 인터프리터 언어는 소스 코드를 어떻게 실행하는지에 따라 구분됩니다. 각각의 특징과 차이점은 아래와 같습니다
컴파일 언어
컴파일러를 사용해 소스 코드를 한 번에 기계어로 변환한 후 실행하는 방식입니다.
- 특징:
- 컴파일 과정 필요: 소스 코드를 기계어로 변환한 실행 파일(바이너리)을 생성.
- 실행 속도가 빠름: 한 번 변환된 기계어 파일은 별도의 변환 없이 바로 실행 가능.
- 디버깅이 상대적으로 어렵다: 에러가 컴파일 시점에만 감지됨.
- 플랫폼 의존성 있음: 생성된 실행 파일은 특정 운영 체제와 하드웨어에 종속적.
- 예:
- C, C++
- Go
- Rust
- 작동 과정:
- 소스 코드 작성 (.c 파일 등).
- 컴파일러로 기계어 파일(.exe, .out) 생성.
- 실행 파일을 실행.
인터프리터 언어
소스 코드를 실행 시 한 줄씩 해석하며 실행하는 방식입니다.
- 특징:
- 실행 시마다 소스 코드를 해석함 → 실행 속도가 느림.
- 디버깅이 쉽다: 에러가 코드 실행 중에 발견되기 때문.
- 플랫폼 독립적일 수 있음: 인터프리터만 해당 플랫폼에서 실행 가능하면 됨.
- 추가 변환 없이 소스 코드를 바로 실행 가능.
- 예:
- Python
- JavaScript
- Ruby
- PHP
- 작동 과정:
- 소스 코드 작성 (.py 파일 등).
- 인터프리터가 한 줄씩 읽고 실행.
주요 차이점 비교:
특징컴파일 언어인터프리터 언어실행 과정 | 사전 컴파일 후 실행 | 실행 시 해석하며 실행 |
속도 | 빠름 | 느림 |
에러 발견 시점 | 컴파일 단계에서 발견 | 실행 단계에서 발견 |
결과물 | 기계어 실행 파일 생성 | 별도의 실행 파일 없음 |
플랫폼 독립성 | 플랫폼 의존적 | 플랫폼 독립적일 가능성 높음 |
사용 사례 | 시스템, 고성능 응용 프로그램 | 스크립트, 웹, 데이터 처리 |
자바
- 자바는 컴파일 언어와 인터프리터 언어의 혼합입니다.
- 먼저 컴파일러(javac)로 바이트코드로 변환 (컴파일 언어 방식).
- JVM이 바이트코드를 실행 시점에 해석 및 최적화 (인터프리터 방식).
이런 방식 덕분에 자바는 플랫폼 독립성과 실행 성능을 모두 확보합니다.