2023. 12. 28. 20:12ㆍJava
[ 작성 이유 ]
Java로 개발을 하다보면 JVM, JRE, JDK라는 말을 생각보다 자주 보게 된다. 특히 자바 프로그램을 작성할 때에 인텔리제이 같은 IDE에서 JDK를 설정하고 그걸 gradle 파일에 작성을 해준다. 그런데 가끔씩 돌다보면 JRE 설정 같은 것도 있는데 JVM은 뭐라고 설명을 못하겠지만 대충 알겠지만 JRE는 전혀 몰랐었다. 그리고 JDK를 설정하고 나면 나머지는 세팅할 필요도 없기 때문에 딱히 신경 쓰지 않았지만 책에서 보니 한번 짚어 넘겨봐야겠다는 생각이 들었고 작성을 하게 되었다.
[ 용어별 설명 ]
JDK : Java Development Kit / 자바 개발 도구
JRE : Java Runtime Environment / 자바 실행환경
JVM : Java virtual Machine / 자바 가상기계
각각의 의미는 다음과 같다고 한다. 잘 이해가 되지 않을 것 같아 비유를 해보았다. 우리는 컴퓨터에서 윈도우라는 운영체제(OS)로 OS에 맞는 프로그램을 다운로드 받아 개발을 한다. 여기서 JVM은 컴퓨터, JRE는 윈도우 운영체제, JDK는 프로그램에 대응된다. 그런데 인텔리제이에서 프로젝트를 생성하기 위해서는 JDK만 있어도 나머지는 설정하지 않아도 됐고 Java로 작성된 프로그램을 작동시킬 때에는 JRE만 있어도 된다.
그 이유는 위의 이미지를 보면 알 수 있다. JDK는 Java Development Tool + JRE이고 JRE는 JVM + Set of Java Libraries이기 때문이다. 마치 JDK는 인터넷 강의를 보려고 강의를 샀는데 강의를 보라고 윈도우가 깔린 갤럭시탭을 주는 것이다. 그런데 개발을 안하고 java 프로그램만 돌리고 싶어서 JRE만 다운로드 받고 싶어서 JRE를 다운로드 받으려고 해도 다운로드 받을 수가 없다. 그 이유는 Java 11부터는 JRE를 따로 다운로드 받는 것을 불가능하게 만들었다고 한다.
[ Java는 왜 이런 구조를 채택했는가? ]
이런 구조로 Java 프로그램을 돌리게 된 이유는 Java의 철학 때문이다. Java는 "Write Once Run Anywhere"라는 철학을 가지고 있다. 그를 위해서 OS에 종속 받지 않게 설계가 되어있다. OS 위에서 종속받지 않기 위해 실행시키는 역할이 JVM이다.
Java로 프로그래머가 짠 코드는 자바 컴파일러 Javac에 의해 .class 라는 바이트코드로 변환이 된다. 이 Byte code에서 본인 운영체제에 맞는 JRE를 다운로드 받았다면 .class 파일은 운영체제에 맞는 JVM 환경에 따라 JVM은 작동자의 운영체제에 맞는 기계어 바이너리 코드로 변환을 시켜준다. 그래서 우리는 Java 파일을 다운로드 받으면 이렇게 운영체제를 선택하지만 딱히 window에서 짠 코드를 딱히 mac에서 돌릴 때 별다른 작업없이 잘 돌릴 수 있던 것이다.
그럼 이 방식에서 이식성이 높다는 장점을 얻었지만 Java는 느리다는 인식을 만들었고 실제로 느리다. 두번의 compile 가정을 거치기 때문이다. 하지만 하드웨어의 발전으로 더 이상 C/C++보다 느린 것에 대해서 체감을 하기 어렵고 객체지향의 장점을 얻을 수 있는 언어로 자리 매김하게 되었다고 한다.
[ 내용 출처 ]
스프링 입문을 위한 자바 객체 지향의 원리와 이해(김종민 지음)
'Java' 카테고리의 다른 글
자바의 캡슐화 - Private, Protected, Default, Public (0) | 2024.01.10 |
---|---|
Java의 메모리 구조 (0) | 2023.12.28 |
Primitive Type과 Wrapper Class (2) | 2023.12.23 |
Enum Type에 대해서 (0) | 2023.11.06 |
자바의 정석, 열거형(Enum) 2 (0) | 2023.08.29 |