1학년 때, 학부 강의를 듣다보면 JVM..., JDK를 설치해서..., 시스템 환경변수 path에 bin파일을 추가... 등등 하나도 이해하지 못하고 따라하기 급급한 행동들이 있습니다. 저도 그랬습니다. 그리고 저는 심지어 졸업을 한 지금까지도 이해를 하지 못했습니다. 

지금부터, 이에 대해 조금 더 쉽게 이해해보도록 하겠습니다.

 

1. JVM...?

우리가 다른나라로 여행을 간다고 가정해봅시다. 나라마다 표준전압이 다르기 때문에 저희는 '어댑터'를 가져갑니다. 그런데 혹시 이런 어댑터가 없는 상황을 생각해보신적 있으신가요? 저희는 코드가 필요한 모든 전자기기를 해당 나라의 전압에 맞는 것으로 새로 사서 가져가야 합니다(어댑터는 정말 소중한 겁니다ㅎㅎㅎ). 어댑터가 있음으로써, 저희는 '하나의 220V짜리 핸드폰 충전기'와 '어댑터'를 가지고 모든 나라에서 핸드폰을 충전할 수 있는 것입니다.

 

위 비유는 Java 세계에서 아래와 매칭됩니다.

'나라마다 다른 표준전압' = 다양한 운영체제(OS)
'어댑터' = JVM
'전자기기' = Java 어플리케이션

따라서, 우리는 '하나의 Java 어플리케이션' 과 'JVM'을 가지고 모든 '운영체제'에서 실행할 수 있습니다. 하지만 '어댑터'는 220V를 110V, 250V 등등 여러 전압으로 변환해주지만, JVM은 해당 운영체제에 맞는 JVM이 필요합니다. 그래서 저희가 1학년때 그냥 따라만 했던, '운영체제에 맞는 JDK를 다운받아서...'가 해당 운영체제에 맞는 JVM을 다운받는 행위였습니다.

(JDK : JVM과 자바 클래스 라이브러리 등 자바를 개발하는데 필요한 프로그램)

 

2. 시스템 환경변수 path에 bin디렉토리 경로를 추가한다...?

여기서 의문이 드는 점은 두가지 입니다.

JDK의 bin폴더에는 뭐가 있는데? 와 시스템 환경변수 path에 등록하면 뭐가 좋은데? 입니다.

 

(1) JDK의 bin폴더에 있는것

여기에는 javac.exe, java.exe 등등 쉽게 말해서 JVM을 실행시키는 실행파일들이 있습니다. 쉽게 알아보도록 하겠습니다.

javac.exe - 220V 핸드폰 충전기를 어댑터에 꽂는 행위
java.exe - 이 어댑터를 콘센트에 꽂는 행위

좀 더 깊게 들어가면,

javac.exe 실행파일은 Java코드를 JVM이 이해할 수 있는 바이트 코드로 바꾸는 역할을 합니다.

java.exe 실행파일은 이렇게 만들어진 바이트 코드를 기계어로 번역해 운영체제로 전달해서 실행하는 역할을 합니다.

자세히 이해하려면 컴퓨터 구조, 운영체제에 대한 이해가 필요합니다. 따라서, 이러한 지식이 없다면 그냥 느낌정도만 아는 것으로 충분하다고 생각합니다.

 

(2) 시스템 환경변수 path에 등록하면 좋은 점

시스템 환경변수 path에 디렉토리 경로를 등록하면, 어디서라도 해당 디렉토리안에 들어있는 파일을 실행할 수 있습니다. 이는 쉽게 말해, 운영체제에게 어댑터(JVM)의 위치를 알려준다고 생각할 수 있습니다. 운영체제는 어댑터의 위치를 알고있어서, Java어플리케이션을 실행할 때 언제든 가져와 사용할 수 있습니다. 이를 위해 path를 등록하는 것입니다. 


'Java의 정석' 책의 Chapter 1을 읽으면서, 이전에 대학교 1학년 때 따라만 했던 행위를 이해할 수 있었습니다. 저와 같은 분들에게 도움이 됐으면 좋겠습니다~ 

 

'Java' 카테고리의 다른 글

JAR, WAR, EAR  (1) 2023.09.18
Garbage Collector  (0) 2023.09.15
JVM  (0) 2023.09.14
Abstract Class vs Interface  (0) 2023.09.13
[Java의 정석] Static이란?  (0) 2023.04.07

+ Recent posts