JDK(Java Development Kit)
- 자바 개발자에게 무료로 배포하는 소프트웨어
- JDK = 자바 컴파일러 등의 개발 도구 + JRE

참고 SDK(Software Development Kit)
- 특정한 소프트웨어 프레임워크, 하드웨어 플랫폼, 컴퓨터 시스템 게임기 등을 위한 응용프로그램 등을 만들 수 있게 해주는 개발 도구의 집합
- 자바의 SDK 가 JDK
JRE(Java Runtime Environment)
- 자바 응용 프로그램이 실행될 때 필요한 소프트웨어들
- JRE = 개발자가 활용할 수 있는 자바 API(이미 컴파일된 다양한 클래스 라이브러리) + 자바 가상 기계(JVM)

가발자가 아닌 일반 사용자의 경우 JRE만 필요하며 JRE만 따로 다운 가능
JDK(Demo와 Samples 포함)나 JRE은 오라클 사이트에서 다운 가능(https://www.oracle.com/kr/java/technologies/downloads/)
Java SE의 JDK 구조
Java SE(Standard Edition) 는 자바 표준 배포판으로 JDK의 배포판 중 하나이다.

JDK 설치 후 사용자 디렉터리 구조
일반적으로 오라클 등의 사이트에서 JDK를 다운 받을 때 Java로 다운받게 된다.
아래는 JDK15와 JDK17을 받아둔 모습이다.

가장 최근에 다운 받았던 JDK19로 자바 디렉터리 구조를 확인해보자.

Java
> jdk-17
>> bin : 자바 개발, 실행에 필요한 도구와 유틸리티 명령
>> conf : 여러 종류의 배치 파일
>> include : 네이티브 코드 프로그래밍에 필요하는 C 언어 헤더 파일
>> jmods : 컴파일된 모듈 파일들
>> legal : 각 모듈에 대한 저작권과 라이선스 파일
>> lib : 실행 시간에 필요한 라이브러리 클래스들
JDK > bin 디렉터리에 들어가 있는 중요 개발 소프트웨어
- javac : 자바 컴파일러, 자바 소스(.java)를 바이트 코드(.class)로 변환
- java : 자바 프로그램 실행기, JVM(자바 가상기계)을 작동시켜 자바 프로그램 실행
- javadoc : 자바 소스로부터 HTML 형식의 API 도큐먼트 생성
- jar : 자바 클래스 파일을 압축한 자바 아카이브 파일(.jar) 생성, 관리
- jmod : 자바의 모듈 파일(.jmod)을 만들거나 모듈 파일의 내용 출력
- jlink : 응용 프로그램에 맞춘 맞춤형(custom) JRE 제공
- jdb : 자바 응용 프로그램의 실행 중 오류를 찾는데 상요하는 디버거
- javap : 클래스 파일의 바이트 코드(.class)를 소스와 함께 보여주는 디어셈블러
자바의 배포판
오라클은 응용에 따라 크고 작은 여러 종류의 JDK를 제공 => 배포판이라고 부름
자바 배포판의 종류는 여러가지 그 중 대표적인 대표판은 아래와 같다.
Java SE(Standard Edition)
- 자바 표준 배포판으로서, 데스크톱 응용프로그램과 서버 응용프로그램을 개발하기 위한 JDK
Java ME(Micro Edition)
- 모바일용 배포판으로 IoT, TV, 블루레이, 셋톱박스 등 작은 하드웨어 자원을 갖는 장치에 적합한 JDK
- 그러나 스마트폰이나 고해상도 TV 등은 안드로이드에게 자리를 내어주고 있는 상태
Java EE(Enterprise Edition)
- 기업용 배포판으로 자바를 이용한 다중 사용자, 대규모 기업 응용 프로그램 개발을 위한 JDK
*자바를 하나로 언어로 보기 보다는 언어 + 컴파일러 + JVM 등의 실행환경을 모두 갖춘 플랫폼으로 이해하고 넘어가자
Java 8에서 Java 9로의 큰 변화 : 모듈화(modularity)
- 모듈 : 자바 패키지들과 이미지, XML 파일 등의 자원들을 묶는 단위
- 모듈화로 자바 응용프로그램을 마치 직소 퍼즐을 연결하듯이 모듈을 연결하는 방식으로 구성되게 함
- JDK 9부터는 자바 API를 모듈 파일에 넣어 제공
- 이를 위해 Java 9부터는 개발자들이 호출하는 Java SE의 모든 클래스들을 모듈들로 재설계하고 재정리함
- Java > JDK > jmods 디렉터리 내에 모듈들이 담겨있음

자바 모듈화의 목적
- 세밀한 모듈화를 통해 자바 응용 프로그램이 실행되는데 필요 없는 모듈을 배제하여 작은 크기로 배포할 수 있도록 함
- 하드웨어가 열악한 소형 IoT 장치에서도 필요한 모듈들로만 구성된 작은 크기의 자바 응용프로그램 실행 환경(실행 시간 이미지라고 부름)을 만들어 실행시키고 성능을 유지하게 함
자바 API
- 자바 API(Application Programming Interface)는 개발자들이 사용하도록 미리 만들어둔 자바 클래스들의 집합
- Java 9부터는 모듈화 정책에 따라 모든 자바 API의 클래스들을 서로 관련된 클래스들을 패키지로 묶고, 다시 패키지들을 모듈로 묶어 계층화해 놓음
- Java 9의 모듈화 정책 => 자바 API : 클래스 => 패키지 => 모듈로 계층화
- 자바 API 설명 문서 : https://docs.oracle.com/javase/8/docs/api/
Java Platform SE 8
docs.oracle.com
- 아래의 자바 API 예시처럼 API 도큐먼트 HTML 파일 생성시 JDK 내의 javadoc 프로그램을 사용한다.

자바 IDE
- IDE(Integrated Development Environment) : 소스 코드 편집, 컴파일, 디버깅을 한꺼번에 할 수 있는 통합 개발 환경(소프트웨어)
- IDE 예시: 마이크로소프트(MS)의 비주얼 스튜디오, IBM의 이클립스(eclipse)

'Java' 카테고리의 다른 글
| [Java] OpenJDK와 Oracle JDK 비교 및 JDK 선택 방법 (0) | 2024.04.06 |
|---|---|
| [Java] 자바 서블릿(servlet)과 응용 프로그램 예시 (1) | 2024.04.04 |
| [Java] 특징부터 C/C++ vs Java 실행 환경 차이 비교 (1) | 2024.04.03 |
| [Java] 자바의 탄생 (3) | 2024.04.03 |
| [Java] 프로그래밍 언어의 진화 그리고 컴파일과 실행 (1) | 2024.04.03 |