프로그래밍(java, c, c++ 등..) 언어들은 인간친화적 언어이다. 인간이 알아볼 수 있도록 작성할 수 있고 그것을 해독할 수 있다. 하지만 컴퓨터는 다르다. 컴퓨터는 0아니면 1로 이루어진 기계어 신호만 알아듣기 때문에 우리가 작성한 프로그래밍 언어는 이해할 수 없다. 그렇기 때문에 컴퓨터를 통해 언어를 실행시키기 위해서는 기계어로 번역해줘야 한다. 번역을 하는 과정이 compile(컴파일)이고 번역 역할을 도와주는 녀석이 compiler(컴파일러)이다. 대표적인 컴파일러 언어는 c와 c++가 있다.
컴파일러와 달리 소스 작성 후 번역 작업을 한 번에 처리하는 것이 아니라, 실행 할 때마다 interpreter라는 프로그램이 컴퓨터에게 코드를 기계어로 변역해준다. 대표적인 언어로는 Javascript, Python, Ruby 등이 있다.
자바는 컴파일러 언어이기도 하고 인터프리터 언어이기도 하다. 자바는 다른 컴파일러 언어들이 작동하듯이 자바 컴파일러를 이용해 전체 코드를 한번에 번역한다. 이 과정은 컴파일러 언어와 동일하지만 자바 컴파일러는 코드를 바로 기계어로 번역해주는 것이 아니라, 자방 가상 머신(JVM)이 실행시킬 수 있는 자바 바이트코드(class)로 번역한다. 보통 자바를 컴파일하고나면 .java 파일들이 .class 파일로 변환된 것을 확인할 수 있는데 class 파일은 바이트코드로 이루어져 있다.
java compiler의 역할
java interpreter 역할
JIT 컴파일러(compiler)
먼저, compiler는 인간이 작성한 프로그래밍 언어를 컴퓨터가 이해할 수 있는 기계어로 번역하는 역할을 하는 프로그램입니다. 대표적인 컴파일러 언어로는 c와 c++가 있습니다.
반면, interpreter는 소스 코드를 한 번에 번역하지 않고 실행할 때마다 프로그램이 소스 코드를 기계어로 변역하는 역할을 하는 프로그램입니다. 대표적인 인터프리터 언어로는 Javascript, Python, Ruby 등이 있습니다.
Java는 컴파일러 언어이기도 하고 인터프리터 언어이기도 합니다. Java는 자바 컴파일러를 이용해 전체 코드를 한 번에 번역하지만, 번역된 코드는 기계어가 아닌 JVM이 실행시킬 수 있는 자바 바이트코드로 번역됩니다. JVM은 자바 바이트코드를 한 줄씩 읽어 기계어로 변환하여 실행합니다.
또한, JIT 컴파일러는 인터프리터의 효율을 높이기 위해, 인터프리터가 반복되는 코드를 발견하면 해당 코드를 네이티브 코드로 바꿉니다. 그러면 이후에는 인터프리터가 바로 네이티브 코드를 사용하여 실행할 수 있으므로 성능이 향상됩니다.
따라서, 컴파일러와 인터프리터는 프로그래밍 언어를 실행하는 방식에서 차이가 있으며, Java는 컴파일러와 인터프리터를 모두 사용합니다.