드디어 JVM, JRE 글에 이어 마지막인 JDK에 대한 글을 작성한다.
Eclipse를 설정하면서 생겼던 'JRE와 JDK가 대체 뭐지'에 대한 궁금증부터 시작하여
여기까지 오게 되었다.
복습 및 예습
- JVM은 자바 프로그램을 실행하는 Java Platform 구성요소이다 (관련 글 1, 2, 3).
- JRE는 JVM을 생성하는 디스크 상의 한 부분이다 (관련 글).
- JDK는 개발자들이 JVM과 JRE에 의해 실행되고 구동될 수 있는 Java 프로그램을 생성할 수 있게 해준다.
JDK란?
Java Development Kit의 줄임말로,
말 그대로 자바 개발 키트.
즉, 자바로 애플리케이션을 만들 때 필요한 플랫폼 구성 요소들을 갖고 있는 키트이다.
JRE은 물론,
컴파일러, 디버거 등의 개발 도구들을 갖고 있다.
기술적인 정의를 하자면,
"컴파일러와 클래스 라이브러리를 포함하는, 자바 플랫폼 사양서의 구현"이고,
일반적인 정의로는,
"개발자가 자바 기반 애플리케이션 개발을 위해 다운로드하는 소프트웨어 패키지"
정도로 말할 수 있다.
JDK를 제공하는 곳은 크게 두 가지가 있는데,
아마 이전 글들을 보신 분들이라면 딱 떠오를 것이다.
폐쇄적으로 운영하는 상업 코드 기반의 OracleJDK와
오픈소스로 운영 중인 OpenJDK.
OpenJDK는 Oracle, Azul 등에서 제공하고 있으며,
이 OpenJDK를 기반으로 만들어진 자체 개발 JDK를 포함한 제품들도 많이 나오고 있다.
그런데 2018년 말 쯤부터 Oracle사에서
OracleJDK에 대해 유료화를 발표하여 많은 이슈가 되었는데,
(OpenJDK는 유료화 대상이 아니다)
이 글에서는 다루지 않을 예정이다.
관심 있는 분들은 여기나 여기에 들어가서 읽어보면 좋을 듯 싶다.
컴파일러?
앞선 JVM, JRE 글에서도 언급되며 몇 번 설명했지만 다시 알아보자.
자바 컴파일러(javac)는 우리가 눈으로 보고 이해 가능한 평범한 텍스트로 작성된
원시(Raw) .java 소스 코드 파일을 받아서
실행 가능한 .class 파일로 만드는 기능이 있는 소프트웨어다.
JRE와 JDK의 차이점
JRE와 혼동할 수 있는데,
JRE는 "자바 코드를 실행하기 위한 도구"들로 구성된 패키지인 반면,
JDK는 "자바 기반 소프트웨어를 개발하기 위한 도구"들로 이루어진 패키지라는 것이다.
JRE는 단지 자바 프로그램을 실행하기 위한 독립형 구성요소로 생각할 수 있고,
자바 프로그램을 실행하는 것 자체가
자바 프로그램 개발의 일환이기 때문에 JDK는 JRE를 필요로 한다.
(개발한 자바 코드가 잘 돌아가는 지 테스트도 해보고, 디버깅도 해보는 등의 실행을 해야 하기 때문)
JVM, JRE, JDK에 대한 그림
아래 그림으로 JVM, JRE, JDK에 대한 것을 시각적으로 알아보자.
가져오려는 그림이 해당 사이트에서도 깨져 있어서 잘 안보인다..
가장 왼쪽에는 JDK 안에 JRE가 포함된 그림이 있고,
가운데에는 Compiled Java Program,
가장 오른쪽에는 Java Program Runs inside(?)를 포함하는 JVM이 있다.
가장 왼쪽(JDK+JRE)에서 Compiled Java Program으로 가는 화살표에는
'Used to Create a Java Program'이고,
JRE에서 Compiled Java Program으로 가는 화살표에는
'Used to execute Java Program',
Compiled Java Program에서 JVM+Java Program Runs Inside로 가는 화살표에는
'When executed ??? a JVM'으로 써져있다(???는 나도 모르겠음;; 안보여).
하여튼,
잘 안 보여도 이 그림으로만 봐도 어느 정도 이해가 갈 것이라 생각한다.
이렇게 JVM, JRE에 이은 마지막 JDK에 대한 글도 끝이 났다.
정말 마지막으로 JDK 설치할 때 볼 수 있는 용어들과
JDK를 실제 설치 후 동작시키는 과정을 알아보는 글을 작성하며 끝마칠 예정이다.
끝!
'Study > Java' 카테고리의 다른 글
[Java] HashMap, HashSet 이란? - (1) collections란? (0) | 2021.03.19 |
---|---|
[Java] JDK 다운로드 / 설치 / 실행 방법 (Eclipse 설정) (0) | 2021.01.02 |
[Java] For vs. ForEach (여러 사용법과 속도 차이) (0) | 2020.12.23 |
[Java] JRE란? (0) | 2020.12.21 |
[Java] JVM이란? - (3) 구성 요소 (2) | 2020.12.14 |