프로그램의 실행을 위해 우리는 source code를 작성한다. 우리가 아는 .java 파일들이 전부 소스코드이다.
이 소스코드를 컴퓨터가 실행할 수 있도록 하는 코드로 만들기 위해서는 해당 코드를 컴파일 해야한다.
그리고 각 OS마다 해당 컴퓨터가 이해하고 읽을 수 있는 언어가 다르다.
이러한 다른 부분을 java에서는 javac, kotlinc와 같은 컴파일러가 해당 코드를 Java bytecode 라는 언어로 컴파일을 해준다. .class 확장자의 파일이 바로 그런 것이다.
이렇게 컴파일 된 파일은 바로 컴퓨터가 읽을 수 있는 것이 아니라, JVM이라는 가상 컴퓨터가 이를 실행 할 수 있도록 해준다.
java 바이트코드가 실행 되기 위해서는 컴퓨터에 알맞은 distribution의 JVM이 설치되어 있어야 한다.
각 OS 환경에 맞는 JVM이 존재하고, 그 JVM을 깔면 어떤 OS와 hardware에 있더라도 JVM 이 있으면 JVM bytecode를 읽어 해당 프로그램을 실행시킬 수 있다.
이말은 즉, 한 플랫폼에서 만들어지는 서비스라도 어떤 OS, 환경에서든 JVM만 존재한다면 실행시킬 수 있다는 것이다. → platform-independent 하다.
위의 설명을 간단하게 표현하면 이러하다.
<aside> 💡 It's important to remember: the part of code before JVM is platform-independent, and the part of code after JVM is platform-dependent.
</aside>
virtual simulation of a pyhsical computer.