컴퓨터가 이해할 수 있는 바이너리 코드는 운영체제마다 다르다. 0과 1로 이루어진 바이너리 코드라도, 윈도우에서는 hello world가 출력되지만, 리눅스와 MAC에서는 출력되지 않을 수 있다.
그렇다면, 프로그래밍 언어는 운영체제에 따라 어떻게 컴파일을 진행하고 있을까?
우선, 컴파일의 개념을 우선적으로 짚고 가겠다.
프로그래밍 언어 (C, JAVA,..)는 사람이 이해할 수 있는 언어이다. 우리가 printf("hello world"); 라고 작성하면 컴퓨터는 당연히 이해할 수 없을 것이다. 프로그래밍 언어 -> 컴퓨터가 이해할 수 있는 바이너리 코드로 변환하는 과정이 컴파일이고, 이는 컴파일러가 수행한다.
C의 경우, 운영체제마다 각기 다른 컴파일러가 존재한다. window라면 그에 맞게 바이너리 코드로 변환해주는 것이다.
Java의 경우, C와는 다른 형태를 가진다. Java의 컴파일러 종류는 하나이며, 운영체제 따른 JVM을 가진다. 컴파일러를 통해 출력된 바이트 코드가 -> window JVM을 거쳐 운영체제에 맞게 변환되는 것이다.
바이너리 코드, 바이트 코드, .class, 기계어 용어 관련 개념 공부가 필요하다.
https://shrtorznzl.tistory.com/82
자바 설치를 할 때마다 들었던 'JDK 버전'. 그렇다면 JVM, JRE, JDK는 어떠한 관계인가?
세 개념은 JVM < JRE < JDK 순서대로 포함하는 관계이다 (JDK가 최상위 개념이라 생각하면 된다.)
JVM은 바이트 코드를 변환하고 실행,
JRE는 라이브러리 파일이 들어있으며,
JDK는 통합개발도구 (컴파일, 디버깅 도구)가 포함되어 있다.