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`만 있으면 됩니다.** 😊


추가 질문이 있다면 언제든지 물어보세요! 🚀





댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY

javascript cheatsheet