JDK(Java Development Kit)는 Java 개발에 필요한 SDK입니다. JDK는 Java 라이브러리와 개발 도구를 포함하며, JRE와 JVM도 함께 설치됩니다.
SDK?
Software Development Kit의 약자로 하드웨어 플랫폼과 운영체제등에서 제공하는 도구 모음이다.
대표적으로 "안드로이드 스튜디오"가 있다.
JDK의 구성이미지 입니다.
Java Standard Edition으로 자바의 기본이 되는 표준 에디션으로 자바언어의 핵심 기능을 제공합니다.
Enterprise Edition으로 SE의 기업용 확장판의 개념으로 사용됩니다.
Micro Eidtiond으로 소형 임베디드 기기와 같은 곳에 사용되는 프로그래밍을 위한 에디션입니다.
JDK는 라이센스에 따라 분류가 진행되는데 대표적으로 Orcle에서 제공하는 JDK의 경우 기업용으로 사용시 비용을 지불해야 한다.
Java Runtime Environment의 약자로 자바의 실행환경을 나타는것입니다.
자바를 동작하기 위해 사용되는 JVM과 프로그램실행을 위한 라이브러리등을 포함한 패키지입니다.
이외에도 jar파일과 properties셋팅을 포함하고 있습니다.
Java Virtual Machine으로, 자바로 작성된 모든 프로그램은 JVM에서만 실행되기 때문에 반드시 설치되어야 합니다.
JVM은 자바 프로그램이 OS와 상호작용하여 실행될 수 있도록 하는 핵심 구성 요소 입니다.
여기서 짚고 넘어가야 할 점은 “왜 JVM을 사용하는가?”에 대한 이유입니다.
JDK에는 이미 JRE라는 런타임 환경이 포함되어 있는데, 왜 JVM이 필요할까?
그 이유는 OS 종속성 때문입니다.
개발 언어와 OS환경에 따라 이해할 수 있는 기계어가 달라집니다.
게임으로 예시를 들어보면 현재 다양하게 제공되는 게임 중 Window OS에서만 제공하는 게임이 많이 있습니다. 이는 C언어의 빠른 실행속도 때문에 많은 게임사에서 C언어로 개발을 진행하기 때문입니다.
그래서 왜 Mac OS에서는 왜 해당 게임을 하지 못하는건데?
C언어는 빠른 속도를 제공하지만 OS에 따라 컴파일러가 달라 OS에 맞춰서 다시 개발해야합니다.
C언어는 WOCA와 이식성이 낮다는 특징을 지니고 있습니다.
WOCA란 "Write Once, Complie Anywhere"의 약자로 한번 작성된 코드라도 OS에 맞게 컴파일 되어야한다라는 의미를 지닙니다. 이러한 특징으로 OS에 종속적이게 되고 따라서 이식성이 낮습니다.
Java는 OS에 종속성의 문제를 해결하기 위해 JVM을 사용합니다.
JVM을 통해 Java컴파일러가 직접적으로 OS에 상호작용하지 않고 동작하도록 중간 단계를 제공합니다.
실행과정이 어떻게 된다는건데?
Java는 1차로 컴파일러를 통해 Byte Code로 변환 후 JVM을 통해
binary Code로 변환해 실행됩니다.
Java -> Complie(ByteCode) -> JVM(BinaryCode)
이처럼 한번더 거쳐서 바이너리 코드로 변환되기 때문에 OS에 종속적이지 않고 모든 환경에서 동작이 가능한 것입니다.
Java는 WORA라는 특징을 지니고 있으며 WORA는 "Write Once, Read Anywhere"약자로 한번작성 코드는 어디서든 읽을 수 있다라는 의미를 가집니다.
무슨소리지? OS 종속성을 극복하기 위해 JVM을 사용한다면서 왜 OS에 종속적이라는 거지?라는 의문이 생기기 마련입니다.
JVM은 Java 프로그램이 OS와 독립적으로 동작할 수 있도록 돕는 역할을 합니다. 하지만 JVM 자체는 특정 OS에서 동작할 수 있도록 설계된 프로그램입니다. 이유는 JDK의 구조에서 찾을 수 있습니다.
JDK는 Java 개발에 필요한 도구와 라이브러리를 포함하며, 각 OS에 맞는 JVM과 JRE를 제공합니다.
Windows, macOS, Linux 등 각 운영체제에 맞는 JDK를 설치해 해당 JDK에 포함된 JVM도 그 OS에서 동작할 수 있도록 설계되어 있습니다.
JVM이 Java 프로그램의 OS 독립성을 보장하는 것은 맞지만 JVM을 실행하기 위한 환경(JDK)은 OS에 맞춰져야 한다는 한계가 있는 것입니다.
다시 정리하자면