# JDK vs JRE



## 1. JDK, JRE&#x20;

### 1.1. JDK (Java Development Kit)

애플리케이션을 개발하기 위한 소프트웨어 개발 도구입니다.

자바로 코드를 작성하고 컴파일하는 데 필요한 툴과 라이브러리들이 포함된 패키지입니다.



### 1.2. JRE (Java Runtime Environment)

자바 프로그램이 실행될 수 있는 환경(Environment)를 제공하며 실행에 초점을 둡니다. JVM 등, 자바 프로그램을 실행하는데 필요한 라이브러리와 클래스 파일들을 포함하고 있습니다.

실행할떄는 JRE만 설치되어도되며, 개발도구는 포함되지 않습니다.



### 1.3. JDK 구성요소

* JRE (Java Runtime Environment)\
  자바 프로그램을 실행하기 위한 환경 제공
* 컴파일러\
  컴파일러를 통해 자바 소스 파일을 바이트 코드로 변환합니다. 사람이 읽을 수 있는 .java 파일을 바이트 코드(.class)로 변환합니다.
* 인터프리터\
  컴파일된 바이트 코드를 실제로 실행하는 것.
* Javadoc\
  소스 파일에 작성된 주석을 기반으로 API 문서를 자동으로 생성해줍니다.
* JAR (Java Archive Tool)\
  여러 개의 클래스 파일을 압축하여 하나의 파일로 묶는 툴
* JDB (Java Debugger)
* Keytool\
  자바 애플리케이션에서 사용할 인증서를 관리하는 도구



### 1.4. JRE 구성요소

* JVM (Java Virtual Machine)\
  자바 프로그램이 실행되는 가상 머신. JVM은 독립적인 환경을 제공하며, 이를 통해 자바 프로그램은 한번 작성하면 다양한 플랫폼에서 실행될 수 있습니다.
* 클래스 라이브러리\
  원활하게 실행하기 위한 표준 라이브러리 포함. (java.lang, java.util, javaj.io 등)
* 클래스 로더\
  자바 클래스 파일을 메모리에 로드
* 메모리 관리\
  GC를 통해 메모리를 자동으로 관리



## 2. JDK와 JRE의 차이점

JDK와 JRE의 가장 큰 차이점은 **목적**입니다. JDK는 개발을 위한 도구 모음이며, JRE는 실행을 위한 환경입니다. JDK에는 JRE가 포함되어 있으므로, JDK를 설치하면 JRE도 자동으로 설치됩니다.

| 구분    | JDK              | JRE              |
| ----- | ---------------- | ---------------- |
| 용도    | 자바 애플리케이션 개발     | 자바 애플리케이션 실행     |
| 포함 요소 | JRE, 컴파일러, 디버거 등 | JVM, 클래스 라이브러리 등 |
| 대상    | 개발자              | 최종 사용자           |



## 3. 자바 프로그램 실행 과정

1. 소스 코드 작성
2. 컴파일: JDK의 javac를 사용
   1. 컴파일러가 바이트 코드 생성
   2. 컴파일 타임 에러 검사
3. 실행: JRE의 JVM을 통해 실행
   1. 클래스 로더를 통해 파일을 메모리에 로드
   2. 인터프리터를 통해 한줄씩 기계어로 변환 및 실행
   3. GC를 통해 더 이상 사용되지 않는 객체들을 메모리에서 제거

