Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

JDK, JRE, JVM의 차이점 완벽 정리

JDK, JRE, JVM은 서로 밀접하게 연관되어 있어 단순히 표로만 비교하기보다는 각각의 역할과 상호 관계를 이해하는 것이 중요합니다. 아래에서 각 개념을 하나씩 살펴본 후, 핵심 차이점을 표로 정리해 드리겠습니다.

JVM(Java Virtual Machine)이란?

JVM은 자바 바이트코드를 실행할 수 있는 런타임 환경을 제공하는 추상적인 사양(Specification)입니다. JVM 자체는 추상적인 개념이며, 실제 구현체는 알고리즘 선택에 대한 자율성을 가지고 오라클(구 썬 마이크로시스템즈)을 비롯한 여러 회사에서 제공하고 있습니다.

JVM의 핵심 역할은 바이트코드를 해당 하드웨어와 운영체제에 맞는 네이티브 코드로 변환하는 것입니다. 또한 다른 언어로 작성되어 자바 바이트코드로 컴파일된 프로그램도 실행할 수 있습니다.

JVM이 수행하는 주요 작업은 다음과 같습니다.
- 코드 로드(Loading)
- 코드 검증(Verifying)
- 코드 실행(Executing)
- 런타임 환경 제공(Runtime Environment)

JRE(Java Runtime Environment)란?

JRE는 JVM의 구현체(Implementation)로, JVM에 정의된 사양을 실제로 구현하여 코드 실행에 필요한 환경을 만들어 줍니다. JRE는 자바 바이너리와 프로그램 실행에 필요한 클래스들로 구성되어 있으며, JVM과 달리 물리적으로 존재하는 실체입니다.

또한 JRE에는 자바 바이너리 외에도 애플리케이션 배포 기술, 실행 중인 코드와 상호작용하기 위한 사용자 인터페이스(UI), 다양한 기능을 지원하는 기본 라이브러리, 언어 및 유틸리티 기반 라이브러리 등이 함께 포함되어 있습니다.

JDK(Java Development Kit)란?

JDK는 자바 프로그램을 컴파일, 디버깅, 실행하는 데 필요한 모든 도구, 실행 파일, 바이너리를 포함하는 소프트웨어 개발 키트입니다. JDK는 플랫폼에 종속적이기 때문에 Windows, macOS(mac), Unix 계열 시스템마다 별도의 설치 파일이 제공됩니다.

JDK는 JVM과 JRE를 모두 포함하며, 코드 작성부터 실행까지 전 과정을 책임집니다. 참고로 우리가 흔히 말하는 '자바 버전'은 곧 JDK의 버전을 의미합니다.

JDK, JRE, JVM 핵심 차이점 비교

번호구분JDKJREJVM
1정의JDK(Java Development Kit)는 자바로 애플리케이션을 개발하기 위한 소프트웨어 개발 키트입니다. JRE에 더해 컴파일러, JavaDoc, 자바 디버거 등 다양한 개발 도구를 포함합니다.JRE(Java Runtime Environment)는 JVM의 구현체이며, 자바 가상 머신(JVM), 자바 클래스 라이브러리, 그리고 자바로 작성된 애플리케이션을 실행하는 데 필요한 기타 구성 요소를 제공하는 소프트웨어 패키지입니다.JVM(Java Virtual Machine)은 플랫폼에 따라 구현이 달라지는 추상 머신입니다. 사양(Specification, JVM 구현의 요구 사항을 설명하는 문서), 구현(Implementation, JVM 요구 사항을 충족하는 프로그램), 인스턴스(Instance, 자바 바이트코드를 실행하며 런타임 환경을 제공하는 구현체)의 세 가지 개념으로 이루어집니다.
2주요 기능JDK는 코드 실행에 사용되며, 개발(Development)이 핵심 기능입니다.JRE는 코드가 실행될 수 있는 환경을 구축하는 역할을 주로 담당합니다.JVM은 모든 구현 내용을 명세하고, 그 구현체를 JRE에 제공하는 역할을 합니다.
3플랫폼 독립성JDK는 플랫폼에 종속적입니다. 즉, 플랫폼마다 별도의 JDK가 필요합니다.JDK와 마찬가지로 JRE 역시 플랫폼에 종속적입니다.JVM은 플랫폼 독립성을 보장합니다. 운영체제마다 구현 방식은 다르지만, 한 번 컴파일된 바이트코드가 어떤 플랫폼에서도 실행될 수 있도록 해줍니다.
4포함 도구JDK는 개발을 위한 핵심 패키지이므로 자바 애플리케이션을 개발, 디버깅, 모니터링하는 도구들을 포함합니다.JRE에는 컴파일러나 디버거 같은 개발 도구가 없습니다. 대신 프로그램 실행 시 JVM이 필요로 하는 클래스 라이브러리와 지원 파일들을 포함합니다.JVM에는 소프트웨어 개발 도구가 포함되어 있지 않습니다.
5구성JDK = JRE + 개발 도구(Development Tools)JRE = JVM + 애플리케이션 실행용 라이브러리(Libraries)JVM = 자바 바이트코드 실행을 위한 런타임 환경

정리

세 가지 개념의 포함 관계를 간단히 표현하면 JDK ⊃ JRE ⊃ JVM 구조입니다. 자바 프로그램을 개발하려면 JDK가, 이미 만들어진 자바 프로그램을 실행만 하려면 JRE가, 그리고 바이트코드를 실제로 해석하고 실행하는 엔진으로는 JVM이 필요하다고 이해하면 됩니다.