컴파일과 인터프리트의 이해를부터 먼저 해야 한다.

 

C#이나 Java 같은 프로그래밍 언어로 코드를 작성하더라도 컴퓨터는 바로 이해하지 못한다.

 

왜냐하면 컴퓨터는 0과 1, 즉 이진법으로 이루어진 기계어를 이해하는데, 우리가 사용하는 프로그래밍 언어는 이 기계어와 상당히 다르기 때문이다.

이 문제를 해결하기 위해 프로그래밍 언어를 컴퓨터가 이해할 수 있는 기계어로 변환해 주는 과정이 필요한데, 이 과정이 바로 '컴파일'과 '인터프리트'이다.

컴파일은 프로그래밍 언어로 작성된 코드를 한 번에 기계어로 번역하는 과정을 의미한다. 이렇게 번역된 코드는 실행 시간에 바로 실행될 수 있으며, 그 결과 프로그램의 실행 속도가 빠르다.

반면에, 인터프리트는 프로그래밍 언어로 작성된 코드를 한 줄씩 실시간으로 기계어로 번역하며 실행하는 방식이다. 이 방식은 실행 시간에 번역과 실행이 동시에 이루어지기 때문에 컴파일 방식보다 실행 속도는 느리지만, 코드 수정이 빠르고 간편하다는 장점이 있다.

C 계열 언어와 자바는 컴파일 방식을 사용하는 언어에 속한다.

 

그러나 Java는 C와 같은 기존의 컴파일 언어와는 다른 점이 있다.

일반적으로 Compiled된 코드는 특정 운영체제에서만 실행될 수 있다. 예를 들어, Windows 용으로 컴파일된 코드는 Linux나 Mac에서 실행할 수 없다.

 

하지만 자바는 JVM(Java Virtual Machine)이라는 중간 매개체를 통해 이 문제를 해결한다. 자바로 작성된 코드는 JVM이 설치된 모든 운영체제에서 실행될 수 있다.

 

자바로 작성된 코드는 먼저 '자바 컴파일러'에 의해 바이트코드로 변환된다.  이 바이트코드는 기계어가 아닌 중간 코드로, JVM이 이해할 수 있는 언어이다. 그 후 JVM은 이 바이트코드를 각 운영체제에 맞는 기계어로 번역하여 실행한다.

 

새로 개발하는 요리의 레시피를 작성하는 것에 비유하자면 코딩한 결과,  즉 레시피를 컴파일해서 컴퓨터에게 건내주면 컴퓨터는 이 번역본을 보고 요리를 하는 것이다. 

 

컴퓨터가 종류마다  다른 언어를 쓰는 국가라고 치고  Windows, Mac, Linux 이렇게 3개의 국가가 있다고 가정해 보자.

 

C나 C++ 등의 언어로 레시피를 작성하고 나면 이것들을 각국의 현지어로 번역해서 보내야 했다.

코드를 실행할 컴퓨터의 종류에 따라  따로따로 컴파일을 해야 하니 여간 번거로운 일이 아닐 수 없다.

 

그런데 Java는 다른 방식을 도입했다.

Windows, Mac, Linux 이렇게 3개의 국가에 JVM-자바 가상 머신이라는 주방장을 파견한다

실행할 컴퓨터에 JVM이란 프로그램을 다운로드하는 것이다.

 

그럼 이 주방장들은 두 가지의 언어를 할 줄 아는 것이다. 먼저, 자기가 파견된 현지의 언어. 즉, 해당 컴퓨터의 기계어를 할 줄 아는 것이다. 다른 하나는 "자바 바이트코드"라는 주방장 공용어이다.

 

자바로 짠 코드는 바로 이 언어로 컴파일된다.

 

그래서 자바를 사용하는 레시피 개발자들은 레시피를 작성한 다음 이걸 단 하나의 언어 "자바 바이트코드"로 번역해서  각 국에 보내면 이 JVM이란 주방장들이 공통 번역본을 읽고 파견된 국가의 직원들, 즉, 컴퓨터 자원들에게 현지어로 지시를 내리는 것이다. 자바 개발자들은 자바를 실행할 컴퓨터 및 기기에 이 JVM이라는 프로그램만 설치해 두면 개발을 할 때 어떤 언어로 컴파일을 해야 할지 전혀 신경 쓰지 않아도 되는 것이다.

 

자바를 실행하기 위해 만들어진 JVM은 Kotlin, 스칼라, 그루비, Clojure  몇몇 다른 언어들에서도 사용할 수 있다.

 

이 언어들도 자바 바이트코드로 컴파일되도록 만들어졌기 때문이다.

 

그래서 안드로이드 앱을 만들거나 스프링 부트로 서버를 프로그래밍할 때 자바뿐만 아니라, Kotlin 등도 사용할 수 있는 것이다.

오늘날에는 JVM 말고도 많은 다른 언어들이 각각의 가상머신들을 사용해서 동작하고 있다.

이제는 가상머신을 쓴다는 것이 자바만의 강점은 아닌 것이다.

 

그럼 JRE는 뭐 JDK는 무엇일까?

 

자바 개발에 필요한 도구와 라이브러리를 제공하는 것이 JDK(Java Development Kit)이다.

JDK에는 자바 컴파일러와 JVM이 포함되어 있다.

즉, 자바로 프로그램을 개발하고 실행하기 위해서는 JDK가 필요하다.

 

레시피를 개발하는 회사로 비유할 수 있다. JDK(회사)안에 JRE(식당)가 있고, JRE안에 JVM(주방장)이 있는 것이다. 

 

JRE(Java Runtime Environment)는 자바 프로그램을 실행하기 위한 환경을 제공한다. JRE에는 JVM과 필수적인 라이브러리들이 포함되어 있다. 


아까 현지에 파견된 주방장을 JVM이라고 했는데, 현지 식당을 JRE이라고 할 수 있다.


최신의 자바 버전에서는 JRE를 별도로 배포하지 않고, JDK 안에 JRE를 포함시키는 방향으로 가고 있다.

따라서 개발자들은 JDK를 설치하면 자바 프로그램을 개발하고 실행하는 데 필요한 모든 것을 가질 수 있게 되었다.

 

 

 

 

Reference : 자바를 알아보자 (+ JVM, JRE, JDK의 정체)

 https://www.youtube.com/watch?v=OxvtGYvVkRU 

'Developer 지식' 카테고리의 다른 글

스택 메모리(stack memory)  (0) 2023.06.15
스크립트 언어와 컴파일 언어의 차이점  (0) 2023.06.06
Process와 Thread  (0) 2023.06.06
자료구조와 알고리즘이란?  (0) 2023.06.02
Port kill 방법  (0) 2023.05.28

+ Recent posts