자바를 배우면서 염두해야할 사항.
컴퓨터는 정직하지만 바보다 :-)
0과 1(a.k.a 바이너리 or 바이트 코드)밖에 모르는 바보면서, 거짓말은 절대 안한다(에러를 뱉는다면 나만 의심하면 된다는..)
어쨌든 0과 1만 아는 컴퓨터에게 우리가 내린 명령을 컴퓨터가 아는 0과 1로 바꿔주는 과정을 컴파일이라고 한다. 그리고 컴파일 하는 프로그램을 컴파일러라고 부른다(+ er)
근데 이 컴파일러가 모든 운영체제에서 똑같이 일하는것은 아니다.
만약 아래와 같은 코드가 있다고 하자
System.out.println("hello world!")
C언어의 경우 window
, mac
, linux
등 컴파일러가 각각 따로 있어야 hello world!
를 뱉을 수 있는데 JAVA는 좀 다르다!
자바는 자바 컴파일러로부터 생성된 바이너리코드가 있고, 이걸 운영체제에 바로 전달하는게 아니라 각 운영체제 위의 JVM이라는 곳에 전달한다.(운영체제마다 각각 존재하고 java설치할때 같이 설치됨) 그래서 이 JVM을 거쳐서 가기때문에 자바에서는 컴파일러가 하나만 있으면 된다.
즉, 애플리케이션을 어느 운영체제에서 실행하던 결과물이 동일하다는 이야기!
앞서 예를 든 아래의 경우,
System.out.println("hello world!")
JVM 덕분에 window
, mac
, linux
던 hello world!
를 똑같이 확인 할 수 있다. 😋
JVM은 인터프리터(interpreter)방식으로 한 줄 씩 해석한다.
예를들어,
(보통 컴파일러와 인터프리터가 같이 쓰이는 경우가 없는데 자바는 좀 특이하게 같이 사용한다.)
📌 Note
JRE는 JVM + 자바 프로그램 실행에 필요한 라이브러리 파일 등을 말한다. JVM의 실행환경을 구현한다고 알면 된다.
가끔 자바로 만들어진 프로그램 실행 시 유저에게 자바 설치하라는게 뜨기도하는데, 그게 JRE다. (실행하기 위해 필요하기때문에!)
자바 개발도구로 JRE + 개발을 위한 도구가 포함되어있다.
JRE는 실행을 위한 도구, JDK는 개발을 위한 도구(컴파일러, 디버그 도구 등)
순서도로 보면 더 이해가 쉽다!
JDK > JRE > JVM 순이기때문에 JDK를 설치하면 JRE와 JVM도 함께 설치된다는 말씀!
따라서 JAVA의 버전 = JDK의 버전이 된다.