1. 인터프리터 방식
2. 컴파일 방식
다시 핵심!
둘 다 고레벨 언어로 작성된 프로그래밍 언어를 기계어로 번역하는 것은 동일하다!
둘의 차이는
🤚컴파일러는 전체 소스코드를 보고 명령어를 수집하고 재구성하지만
인터프리터는 소스코드의 각 행을 연속적으로 분석하며 실행한다.
🤚 위의 그림 같이
인터프리터는 고레벨 언어를 바로 기계어로 번역하지 않고 중간 형태로 변환시킨 후 실행한다.
반면 컴파일러는 고레벨 언어를 바로 기계어로 변환한다.
helloworld를 작성하고 javac 명령어를 통해 helloworld.java 파일을 helloworld.class로 변환하는 것을 해볼 수 있다. -> 자바 컴파일러가 수행
java -> (javac) -> class
흠? 컴파일러는 기계어를 변환하는 프로그램이라고 하였는데 .class 파일 안의 바이트코드가 기계어인가..?
컴파일러가 소스코드를 오브젝트코드로, 고레벨 언어를 저레벨 언어인 기계어로 변환한다는 것을 안다.
여기서의 기계는 하드웨어가 아니다.
JVM을 위해 기계어로 변환한다는 것이다.
자바인터프리터는 자바컴파일러에 의해 변환된 .class 파일 내의 바이트 코드를 특정 환경의 기계에서 실행될 수 있도록 변환한다.!
위와 같은 프로세스로 동작하게 된다.
위에서 말했듯 Machine Language는 JVM을 가리킨다.
바로 기계어로 변환하는 컴파일러는 프로그램이 작성된 기계상에서 실행할때 매우 효율적이다. 대부분의 하드웨어 제어 시스템이 프로그래밍 언어가 C언어인 이유.
그러나 이와 동시에 기계 종류에 종속된다.
자바 인터프리팅은 자바 컴파일러를 통해 생성된 클래스 파일을 기계어로 변환한다.
1️⃣ 인터프리팅은 플랫폼에 종속되지 않는다.
2️⃣ 자바 바이트코드는 컴퓨터와 프로그램 사이에 별도의 버퍼 역할을 한다.
자바와 자바 바이트 코드 조합으로 플랫폼에 독립적이고 안전한 환경을 제공하면서 동시에 현대 프로그래밍 추상화를 완전 수용 할 수 있다.
컴파일러 - 바이트 코드 생산 (보안적인 장점)
인터프리터 - 플랫폼 독립적