Java프로그램의 동작
- 코드 작성
- 컴퓨터가 실행할 수 있는 형태로 코드를 컴파일
- 컴파일된 프로그램을 실행(런타임)
JDK - Java Development Kit

JDK는 개발자들이 자바로 개발하는데 사용되는 SDK(Software Development Kit)라고 볼 수 있다.
여기에는 개발 시 필요한 라이브러리, 컴파일러(javac), javado, Java 런타임(JRE) 등이 모두 포함된다.
JDK 버전
Java의 버전은 보통 JDK나 Java SE 버전으로 나타낸다.
- Java SE(Standard Edition) : 가장 기본이 되는 표준 에디션 Java Platform으로 핵심 기능 제공
- 이외에도 대규모 기업용인 Java EE, 작은 기기용 Java ME 등이 있다.
JDK 종류
Java는 오픈소스이기 때문에 이를 빌드하여 만들어진 다양한 JDK가 있다. 주요한 JDK는 다음과 같다.
- Oracle JDK : Oracle에서 제공하는 JDK, 구독을 통해 유료 라이센스를 구매하여 사용 가능
- Open JDK : 유명한 무료 JDK, 하지만 OpenJDK를 직접 사용하는것 보다 OpenJDK 기반으로 빌드된 JDK 사용을 추천
- Azul Zulu : 인지도가 높은 JDK 중 하나, Mac 등에서 사용할 수 있는 바이너리를 제공하는 것이 특징
- Amazon Corretto : AWS에서 제공하는 JDK. AWS에서 쉽게 사용 가능하며, AWS 환경이 아니더라도 사용 가능
- Temurin (AdoptOpenJDK) : Eclipse에서 제공하는 JDK. Eclipse를 사용한다면 Temurin 설치를 추천
JDK 구성 요소
- javac : 자바 컴파일러로 자바 소스를 바이트 코드로 컴파일
- java : 자바 인터프리터. 컴파일러가 생성한 바이트 코드를 해석하고 실행
- javadoc : 자바 소스로부터 HTML 형식의 API 도큐먼트 생성
- jar : 자바 클래스 파일을 압축한 자바 아카이브 파일(.jar)을 생성 및 관리하는 압축 프로그램 (zip 같은거)
- jmod : 자바의 모듈 파일(.jmd)을 만들거나 모듈 파일의 내용 출력
- jlink : 응용프로그램에 맞춘 맞춤형 JRE 생성
- jdb : 자바 응용프로그램의 실행 중 오류를 찾는 데 사용하는 디버거
- javap : 역어셈블러. 컴파일된 클래스 파일을 원래의 소스로 변환
JRE - Java Runtime Environment
Java 실행환경으로 JVM과 프로그램 실행을 위한 라이브러리를 포함한다.
JVM - Java Virtual Machine
JVM은 자바를 실행시키는 프로그램이며 자바로 작성된 모든 프로그램은 JVM에서만 실행될 수 있다.
장점
Java는 OS에 종속적이지 않다.
C언어와 비교해서 보자면 C언어로 작성된 프로그램은 각각의 OS에서 다르게 컴파일되므로 윈도우용, 리눅스용, 맥용 C 프로그램을 만들어야 한다. 이를 '이식성이 낮다', 'OS에 종속된 언어'라고 표현한다.
JDK를 설치할 때 각 OS에 맞는 JVM이 설치되고 자바 프로그램은 javac로 컴파일 된 후 이 JVM에서 실행되므로 Java는 OS에 종속적이지 않을 수 있다. 결론적으로 개발자는 1개의 프로그램만 개발하면 되므로 효율성과 생산성이 높아진다.
단점
Java 프로그램은 C 프로그램과 달리 JVM이라는 한 단계를 더 거치므로 속도가 더 느리다. JIT 컴파일러를 사용하여 필요한 부분만 기계어로 바꾸어 성능 향상을 했지만 그럼에도 C언어보다 느리다.
C 프로그램
→ compiler(바이너리 코드로 변환)
→ 프로그램 실행
Java 프로그램
→ compiler(JVM이 인식할 수 있는 바이트 코드인 클래스 파일로 변환)
→ JVM(클래스 파일을 바이너리 코드로 변환)
→ 프로그램 실행
참고 자료
https://inpa.tistory.com/entry/JAVA-%E2%98%95-JDK-JRE-JVM-%EA%B0%9C%EB%85%90-%EA%B5%AC%EC%84%B1-%EC%9B%90%EB%A6%AC-%F0%9F%92%AF-%EC%99%84%EB%B2%BD-%EC%B4%9D%EC%A0%95%EB%A6%AC