컴파일과 인터프리트의 이해를부터 먼저 해야 한다.
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의 정체)
'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 |