마스터께 여쭤보고 싶습니다. 하드디스크에 저장되어 있는 프로그램 코드가 이미 바이너리인데 왜 바로 실행이 안되고 다시 컴파일을 해야 합니까?
제가 이해한 바는: 컴퓨터가 실행할 수 있는 것은 기계 명령입니다. 프로그램 자체는 바이너리 파일 형태로 디스크에 저장되지만 여기에 저장되는 것은 프로그램의 리터럴을 바이너리 형태로 변환한 것 뿐이다. 따라서 프로그램에 해당하는 컴파일러를 통해 해당 기계명령 파일로 컴파일되어야 합니다. 실행은 기계 명령 파일을 실행하는 것입니다.
#Java 언어를 예로 들어 보겠습니다.
소스 파일은 **.java 파일 형식으로 디스크에 저장됩니다. 그러나 그러한 파일은 그 안에 있는 텍스트를 바이너리로 변환하는 것과 동일합니다. 컴퓨터는 그것을 수행하는 방법을 모릅니다.
Java 컴파일러를 통해 **.class 파일로 변환한 후 클래스 파일도 바이너리로 저장되지만 매직 넘버, 마이너 버전 번호, 메이저 버전 번호, 상수 등 자체 구조를 갖습니다. 풀 카운터, 상수 풀, 액세스 플래그, 클래스 인덱스, 상위 클래스 인덱스 등 하지만 이 작업은 컴퓨터에서 직접 실행할 수 없고 자바 가상 머신을 통해 실행해야 합니다. Java 가상 머신은 시뮬레이션된 컴퓨터와 동일하며 프로그램 카운터 등도 가지고 있습니다. 저는 개인적으로 .class 파일의 바이트코드가 jvm의 실행 엔진을 통해 해당 가상 머신 명령어로 변환되어야 한다고 생각합니다. 그러면 실행될 수 있습니다. 실제 실행 시에는 가상 머신에 있는 해당 가상 머신 명령어를 해당 머신 명령어로 변환해야 실행될 수 있습니다.