Java   인터프리터

 

컴파일러와 인터프리터

- 컴파일러 :  한 언어로 작성된 프로그램을 다른 언어의 프로그램으로 바꾸어 주는 프로그램

- 처음 작성된 프로그램을 원시 프로그램 (source program)이라고 부르고, 변환된 프로그램을 목적 프로그램( target program)이라 한다.

- 고급언어로 작성된 원시 프로그램은 기계어의 목적 프로그램으로 컴파일된다.

- 컴파일러가 원시 프로그램 전체를 한거번에 기계어로 바꾼 다음 실행한다.

- 인터프리터는 프로그램을 일부분씩 기계어로 변환하여 실행한다.

- 자바 컴파일러는 자바 원시 프로그램을 바이트 코드로 변환한다.

- 자바 바이트 코드는 특정 컴퓨터로부터 독립적인 자바 가상기계의 기계어이다.

- 자바 인터프리터는 자바 바이트 코드를 해석(interpret) 한다.

- C 언어는 compile 되어 기계어(.OBJ)가 되고 이게 CPU로 전달되어 실행되나, JAVA는 Compile되면 바이트코드 (.class)가 되고 이것이 JVM( Java Virtual Machine)으로부터 기계어로 바뀌어 진다.

- 즉, JAVA는 컴파일 후 바로 실행되는게 아니라 JVM을 거쳐야 하는데, 이를 인터프리터(Interpreters)라 한다.

- CPU에 맞춰진 언어가 JAVA이다. (원래 임베디드 용으로 개발되었다.)

- 단점은 JVM을 CPU의 특성에 맞춰서 다 만들어야 한다. 안드로이드를 예로 들면 LG용 달빅머신, 삼성용 달빅머신 같은 것들이 따로 있어야 하며 이는 즉, linux의 디바이스 드라이버를 각각의 하드웨어에 맞추는 것이다.

- C/C++ 같은 경우 프로그램 소스를 가지고 다른 기계나 운영체제에서 컴파일 하기 위해서는 소스를 변경한후 컴파일 해야한다.

- java의 경우는 소스를 변경하지 않고도 다른 기계나 운영체제에서 컴파일 할 수 있다. 이는 실행하기 직전에 VM이 해당 기계의 실행코드로 번역하여 실행하기 때문이다. 그러므로 JAVA는 플랫폼 독립적인 언어라 할 수 있다.

- JAVA를 본따서 만든 언어로 C#이 있는데 C#은 문법이 JAVA와 비슷하고 실행을 위해서는 JAVA의 VM대신 해당 버전의 framework가 있어야 한다.