본문 바로가기
Language/Java

[Java] 자바 구성

by 진꿈청 2024. 3. 31.

자바 구성

운영체제는 자바 프로그램을 바로 실행할 수 없다.

그 이유는 자바 프로그램은 완전한 기계어가 아닌, 중간 단계의 바이트 코드이기 때문이다.

따라서, 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다.

이것이 자바 가상 기계(JVM: Java Virtual Machine)이다.

  • JVM은 실 운영체제를 대신해서 자바 프로그램을 실행하는 가상의 운영체제 역할을 한다.

운영체제별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에

운영체제별로 자바 프로그램을 별도로 개발하는 것보다는 운영체제와 자바 프로그램을 중계하는 JVM을 두어 자바 프로그램이
여러 운영체제에서 동일한 실행 결과가 나오도록 설계한 것이다.


따라서, 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있다.

바이트 코드는 모든 JVM에서 동일한 실행 결과를 보장하지만, JVM은 운영체제에 종속적이다.

자바 프로그램을 운영체제가 이해하는 기계어로 번역해서 실행해야 하므로 JVM은 운영체제에 맞게 설치되어야 한다.

JVM은 JDK 또는 JRE를 설치하면 자동으로 설치된다.

그렇기에 JDK와 JRE가 운영체제 별로 제공된다.

실행 단계를 그림으로 표현하면 다음과 같다.

  • 자바 프로그램은 확장자가 .java인 파일을 작성하는 것부터 시작.(이것이 소스 파일)
  • 소스 파일을 컴파일러(javac.exe)로 컴파일하면 확장자가 .class인 바이트 코드 파일이 생성.
  • 바이트 코드 파일은 JVM 구동 명령어(java.exe)에 의해 JVM에서 해석되고 해당 운영체제에 맞게 기계어로 번역된다.
  • 바이트 코드는 하나지만, JVM에 의해서 번역되는 기계어는 운영체제에 따라서 달라진다.

자바의 가장 큰 장점 중의 하나인 “Write once, run anywhere.”(한 번 작성하면 어디서든 실행된다.) 는 매우 매력적임에는 틀림없지만, 한 번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행되기 때문에,
C와 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다는 속도가 느리다는 단점을 가지고 있다.


그러나, 기계어로 빠르게 변환해주는 JVM 내부의 최적화된 JIT 컴파일러를 통해 속도의 격차는 많이 줄어들고 있다.


자바 개발 환경 구축

자바 프로그램을 개발하기 위해서는 먼저 Java SE(Standard Edition)의 구현체인 JDK를 설치해야 한다.

Java SE의 구현체는 자바 개발 키트(JDK: Java Development Kit),

자바 실행 환경(JRE: Java Runtime Environment)이라는 두 가지 버전이 있다.

JDK: 프로그램 개발에 필요한 자바 가상 기계(JVM) + 라이브러리 API + 컴파일러 등의 개발 도구 포함

JRE: 프로그램 실행에 필요한 자바 가상 기계(JVM) + 라이브러리 API만 포함

자바 프로그램을 개발하고자 하는 것이 아닌, 이미 개발된 프로그램만 실행한다면 JRE만 설치

  • JRE= JVM + 표준 클래스 라이브러리
  • JDK = JRE + 개발에 필요한 도구

자바 프로그램 개발 순서

  1. .java 소스 파일 작성
  2. 컴파일러(javac.exe)로 바이트 코드 파일(.class) 생성
  3. JVM 구동 명령어(java.exe)로 실행

javac Hello.java → Hello.class → java Hello → JVM이 바이트 코드 파일 메모리로 로드 및 기계어 번역

  1. 자바 소스 파일(*.java)
  2. 컴파일러 javac.exe
  3. 바이트 코드 파일(*.class)
  4. 자바 가상 기계 java.exe
  5. 기계어
  6. 실행