JDK(Java Development Kit), JRE(Java Runtime Environment), JVM(Java Virtual Machine)
**JDK(Java Development Kit)**, **JRE(Java Runtime Environment)**, 그리고 **JVM(Java Virtual Machine)**은 Java의 실행 및 개발 환경과 관련된 핵심 요소들입니다. 이들의 역할과 차이를 명확히 이해하면 Java 생태계를 잘 이해할 수 있습니다.
* * * * *
**1\. JVM (Java Virtual Machine)**
----------------------------------
### **JVM의 역할**
- **Java 프로그램을 실행**하는 역할을 담당합니다.
- Java 소스 코드를 **바이트코드(Bytecode)**로 컴파일한 후, 이 바이트코드를 실행합니다.
- **플랫폼 독립성**을 제공하는 핵심 요소입니다.
- Java 프로그램은 어떤 OS에서도 실행되는데, 이는 JVM이 OS에 맞게 동작하기 때문입니다.
### **주요 기능**
1. **로딩**:
- 클래스 로더(Class Loader)가 바이트코드를 메모리에 로드.
2. **검사**:
- 로드된 바이트코드의 안전성을 확인.
3. **해석**:
- 바이트코드를 인터프리터 방식 또는 JIT(Just-In-Time) 컴파일러로 기계어로 변환하여 실행.
4. **가비지 컬렉션(Garbage Collection)**:
- 불필요한 메모리를 자동으로 회수.
* * * * *
**2\. JRE (Java Runtime Environment)**
--------------------------------------
### **JRE의 역할**
- **Java 프로그램을 실행**하기 위한 환경입니다.
- **JVM + 표준 라이브러리**로 구성됩니다.
- JRE는 Java 프로그램을 실행할 때 필요한 모든 것을 포함하지만, **개발 도구(컴파일러 등)는 포함하지 않습니다.**
### **구성 요소**
1. **JVM**:
- Java 프로그램을 실행하는 엔진.
2. **Java 표준 라이브러리**:
- Java의 기본 API(`java.util`, `java.io`, `java.net` 등).
### **JRE 사용 예시**
- **일반 사용자**가 Java 프로그램을 실행하기 위해 JRE를 설치합니다.
- Java 애플리케이션을 실행하는 데 필요한 런타임 환경만 제공.
* * * * *
**3\. JDK (Java Development Kit)**
----------------------------------
### **JDK의 역할**
- **Java 프로그램을 개발**하기 위한 도구입니다.
- JDK는 **JRE + 개발 도구(컴파일러, 디버거 등)**로 구성됩니다.
- JDK는 Java 개발자에게 필수적입니다.
### **구성 요소**
1. **JRE**:
- Java 프로그램 실행 환경.
2. **개발 도구**:
- **`javac`**: Java 컴파일러 (Java 소스 파일을 바이트코드로 변환).
- **`java`**: JVM을 실행하는 명령어.
- **`javadoc`**: Java 문서를 생성하는 도구.
- **`jdb`**: Java 디버거.
### **JDK 사용 예시**
- Java 개발자가 코드를 작성하고 컴파일, 디버깅할 때 JDK를 사용.
* * * * *
**4\. JDK, JRE, JVM의 관계**
-------------------------
### **계층 구조**
```
JDK > JRE > JVM
```
1. **JVM**:
- Java 프로그램 실행 엔진.
2. **JRE**:
- JVM + 표준 라이브러리(API).
- Java 프로그램 실행 환경 제공.
3. **JDK**:
- JRE + 개발 도구.
- Java 프로그램 개발 및 실행 환경 제공.
### **관계 이미지**
- JDK는 JRE를 포함하고, JRE는 JVM을 포함합니다.
```
JDK
└── JRE
└── JVM
```
* * * * *
**5\. 차이점 요약**
--------------
| **항목** | **JVM** | **JRE** | **JDK** |
| --- | --- | --- | --- |
| **역할** | Java 프로그램을 실행하는 가상 머신 | Java 프로그램 실행 환경 | Java 프로그램 개발 및 실행 환경 제공 |
| **구성** | JVM만 존재 | JVM + 표준 라이브러리 | JRE + 컴파일러(`javac`), 디버거, 기타 도구 |
| **사용자** | 일반적으로 개발자보다 사용자에게 제공 | Java 프로그램 실행이 필요한 사용자 | Java 개발자가 사용 |
| **예시** | 바이트코드를 실행 | Java 애플리케이션 실행 (`java`) | 소스 코드 작성 및 컴파일 (`javac`) |
* * * * *
**6\. JDK, JRE, JVM 예시**
------------------------
1. **JDK 사용**
- 개발자가 Java 프로그램을 작성하고 컴파일:
```
javac Main.java # 소스 코드 컴파일 → 바이트코드 생성
java Main # 바이트코드 실행
```
2. **JRE 사용**
- 사용자 또는 배포된 애플리케이션이 Java 프로그램을 실행:
```
java Main # JRE 환경에서 JVM이 실행
```
3. **JVM의 역할**
- Java 프로그램을 실행할 때 JVM이 바이트코드를 기계어로 변환하여 실행.
* * * * *
**결론**
------
- **JVM**: Java 프로그램을 실행하는 핵심 엔진.
- **JRE**: Java 프로그램 실행 환경 (JVM + 표준 라이브러리).
- **JDK**: Java 프로그램 개발 도구 (JRE + 컴파일러 등).
Java를 학습하거나 실행 환경을 설정할 때, **개발자는 JDK를 설치**해야 하고, **프로그램 실행만 필요한 사용자는 JRE를 설치**하면 됩니다. 😊
JDK, JRE, JVM의 관계를 표현하면 다음과 같이 됩니다:
```
JDK
├── JRE
│ ├── JVM (실행 엔진)
│ ├── Java 표준 라이브러리 (API)
│ └── 기타 실행 지원 파일
├── Java 컴파일러 (javac)
├── Java 디버거 (jdb)
├── Java 문서 생성기 (javadoc)
└── 기타 개발 도구
```
즉,\
✅ **JDK**는 **JRE + 개발 도구(컴파일러 등)**를 포함하고,\
✅ **JRE**는 **JVM + 표준 라이브러리**를 포함하며,\
✅ **JVM**은 **실행 엔진** 역할을 합니다.
💡 **한 줄 요약:**
> 💻 **개발자는 `JDK`를 설치해야 하고**,\
> 🏃♂️ **Java 프로그램을 실행만 하려면 `JRE`만 있으면 됩니다.** 😊
추가 질문이 있다면 언제든지 물어보세요! 🚀
댓글
댓글 쓰기