[Java] 자바는 컴파일 언어? 인터프리터 언어?
컴파일러와 인터프리터
컴파일러와 인터프리터 모두 high-level language를 machine language로 번역한다.
1. 컴파일 언어
컴파일 언어는 내가 작성한 소스 코드 전체를 기계어로 번역한 뒤, 이 번역된 코드를 한 번에 실행하는 두 단계를 거쳐 진행된다. 즉, 번역과 실행이 완전이 따로 이루어진다.
번역은 컴파일러를 통해 수행되고, 대표적인 예시로는 C, C++이 있다.
- 특징
1. 컴파일은 오래 걸릴 수 있다.
2. 이미 컴파일 된 프로그램이라면 빠른 속도로 실행이 가능하다.
3. OS 이식성이 낮다. 다른 OS에서 실행하려면 그에 맞는 컴파일러로 다시 컴파일 해주어야 한다.
2. 인터프리터 언어
인터프리터 언어는 소스 코드를 한 줄씩, 번역과 실행을 동시에 진행한다. 번역은 인터프리터를 통해 수행되며, 대표적인 예시로는 Python, R, JavaScript가 있다.
- 특징
1. 줄 단위로 번역과 실행을 하기 때문에 실행이 느리다.
2. 디버깅이 쉽다. (오류를 발견하면 해당 코드 밑으로는 번역 및 실행 불가)
3. OS 이식성이 좋다. 호환되는 인터프리터만 있다면 바로 실행 가능하다.
자바는 컴파일 언어? 인터프리터 언어?
자바는 컴파일 언어이면서 동시에 인터프리터 언어이다.
- 자바 컴파일러는 javac(java compiler)를 통해 .java 파일을 바이트코드로 쓰여진 .class 파일로 변환한다.
즉, 컴파일러는 자바 소스코드를 JVM을 위한 기계어로 변환한다.
- 자바 인터프리터는 자바 컴파일러에 의해 변환된 class 파일 내의 바이트 코드를 특정 환경의 기계에서 실행될 수 있도록 변환한다.
정리하자면
자바 컴파일러는 소스 코드(.java)를 자바 바이트 코드(.class)로 컴파일하고,
자바 인터프리터는 바이트 코드(.class)를 기계가 이해할 수 있도록 machine code로 변환/번역한다.
자바는 따라서 컴파일 언어이자 인터프리터 언어인 "하이브리드 언어"이다.
혼합 사용을 통해 실행 속도와 코드 수정의 편의성을 조화시킬 수 있다.
https://jooona.tistory.com/157