본문 바로가기

Java

Java complier, JVM, JRE, JDK

Java compiler

  • 컴파일이란?
    • 프로그램의 소스코드를, 기계어로 바꿔주는 과정
  • Java compiler
    • .java 파일인 소스코드를 .class 이라는 바이트코드(Java bytecode)로 변환한다
    • JDK를 설치하면 bin 에 존재하는 javac.exe를 말한다. (즉, JDK에 Java compiler가 포함되어 있다는 소리임)
      • 실제로 test.java 파일을 javac test.java 명령어를 통해 실행하면, test.class 파일이 생성된다.

 

JVM(Java Virtual Machine)

  • Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 앞단에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.
  • 바이트 코드(.class)를 OS가 이해할 수 있는 바이너리 코드(0100100)로 변환한다

 

 

JRE(Java SE Runtime Environment - 자바 런타임 환경)

  • 컴파일 된 자바 프로그램을 "실행"하기 위해 필요한 것
  • 일반적인 사용자 입장에서는, JRE만 있으면 된다. 왜냐하면, 프로그램을 실행하기만 하면 되니까.
  • 실제로, .class 파일을 'java' 명령어로 실행시키면, 결과를 볼 수 있다.

JDK(Java SE Development Kit  - 자바 개발 키트)

  • 자바 언어로 "개발"을 하기 위해 필요한 것.
  • 자바 언어로 작성된 소스(source)를 컴파일하고, 관리할 때 사용하는 도구이다.
  • JDK 안에는 JRE가 포함되어 있는데, 컴파일한 결과를 "실행" 하기 위해서는 JRE가 필요하기 때문이다.
  • Java 진영의 SDK가 JDK인 것이다.

 

JDK가 운영체제별로 설치파일을 제공하는 이유

기본적으로 개발자가 작성한 소스코드는 사람이 이해하는 언어이고,

이를 컴퓨터가 이해하는 언어로 바꿔야 하는데, 그 언어가 바이트 코드이다.

 

그렇다면 그 바이트 코드를 운영체제에서 실행시키면 되는데, 문제는 운영체제마다 이해할 수 있는 언어가 다르다는 것이다.

그래서, 프로그램 설치 시 window 버전, mac 버전을 따로 받아서 설치를 하게 되는 것이다.

 

하지만, 자바는 운영체제와 상관없이 동일한 동작을 실행시킬 수 있는데, 이것을 가능하게 해주는 것이 JVM이다.

JVM이, "자바 소스코드"를 -> "각 운영체제가 알아들을 수 있는 코드"로 변환시켜주기 때문이다.

 

그래서, 자바 자체는 운영체제에 독립적인 언어라고 한다.

하지만, JVM이 운영체제에 의존적이게 된다. 각 운영체제가 알아들을 수 있는 코드로 변환해주는 녀석이 각 운영체제마다 다른 것은 당연한 사실이기 때문이다.

 

 

 

즉, JVM이 운영체제에 의존적이기 때문에, JVM을 포함하는 JDK가 운영체제별로 설치파일을 제공하게 되는 것이다.