[Java] 기본(JVM, JRE, JDK) -2

🌈 m1naworld ·2022년 11월 7일
0

자바를 잡아! 👻

목록 보기
2/19
post-thumbnail
  1. JVM, JRE, JDK 개념
    [Java] 기본(JVM, JRE, JDK) -1

Java의 동작 원리

Java에서는 JDK에 포함된 컴파일러(javac)에 의해 소스파일(*.java)이 목적파일(*.class)로 변환될 때 컴퓨터가 바로 인식가능한 바이너리 코드가 아닌 바이트 코드로 변환된다. 이 바이트 코드는 JVM에 의해 기계어로 해석된다.

반면, C언어는 컴파일러에 의해 소스파일(*.c)이 목적파일(*.obj)로 변환될 때 바이너리 파일로 변환된다. 즉, 컴파일 후에 이미 컴퓨터가 이해할 수 있는 이진코드로 변환된 것이다.

이처럼 C언어와는 다른 동작원리를 가진 Java는 OS에 종속적이지 않는 특징을 갖는다. 즉, JVM을 사용하여 원도우와 리눅스/맥 등 다양한 환경에서 언제나 동일하게 실행할 수 있다는 장점이 있다. 이는 반대로 바이트 코드는 모든 JVM에서 동일한 실행 결과를 보장하지만, JVM은 운영체제에 종속적이다라는 말과 상통한다. 즉, JVM을 운영체제에 맞게 설치하여야 한다.


JVM, JRE, JDK 차이

위와 같이 동작원리를 알면, JVM, JRE, JDK 각각이 하는 역할이 확실하게 구분된다.

JVM은 컴파일된 코드를 직접 실행하며, JRE는 컴파일된 .class 파일이 동작할수 있도록 하는 환경을 제공한다. JRE는 JVM 위에서 프로그램이 원할하게 실행되기 위한 필수적인 요소들을 제공해준다. 그러나 JRE만으로는 실제 Java 코드가 주어져도 이를 분석하거나 클래스 파일로 변환하는 일을 할 수 없다. Java Compiler를 비롯한 개발에 필요한 요소들이 없기 때문에 이러한 경우에는 JDK를 설치하여 사용한다.

즉, 자바로 뭘 개발하는 것이 아니라 실행에만 초점을 맞춘 경우라면 JRE를 설치하여 사용하고 개발을 한다면 JDK를 설치한다. 기존에는 개별적으로 설치가 가능했지만 오라클 JDK-11 버전부터는 따로 제공하지 않는다고 한다.


🔎 용어 정리

  • 프로그래밍 언어: 사람이 작성하는 문자로 이루어진 읽기 좋은 코드 ex) C, C++, Java, Python...

  • 인터프리터(interpreter): 프로그래밍 언어의 소스 코드를 한 줄씩 읽어 바로 실행하는 컴퓨터 프로그램 또는 환경으로 원시코드를 기계어로 번역하는 컴파일러와 대비됨

  • 원시코드(Source Code): 프로그래밍 언어로 작성된 텍스트로 원시코드로 작성된 파일은 컴파일러에 의해 파일이 컴파일 됨

  • 목적코드(Object Code) 또는 목적파일(Object File): 소스코드 컴파일의 결과물, 즉 컴파일된 파일

  • 컴파일(Compile): 프로그래밍 언어를 기계어 혹은 기계어와 유사한 Low Level까지 해석해 주는 과정

  • 컴파일러(Compiler): 프로그래밍 언어를 기계어로 빠르게 컴파일 할 수 있도록 미리 번역해둔 프로그램

  • 바이트 코드(Byte code): JVM 등 VM에서 사용되는 코드 개념으로, 가상 머신이 이해할 수 있는 중간 레벨로 컴파일 한 것을 말함. 이는 어셈블리어와 유사한 형태를 띄고 있으며, javac, csc.exe 등의 컴파일러에 의해 바이트 코드로 변환되고, 이 바이트 코드는 다시 기계어로 해석되는데 이 과정은 인터프리터 방식으로 작동함

  • 바이너리 코드(Binary code): 컴파일러에 의해 생성된 목적 파일이 Binary code라 이해하면 쉽다. 단, 바이너리 코드는 컴퓨터가 이해할 수 있는 언어지만 '링커'에 의해 메모리 주소 값을 반영하고 CPU가 직접 해독하고 실행할 수 있도록 수정되어야 기계어가 되는 것이기 때문에 가장 기계어와 유사한 레벨의 코드이지만 완전한 기계어는 아님

  • 어셈블리어(Assembly languange): 니모닉 기호를 정해 사람이 쉽게 제어할 수 있도록 한 것으로 기계어에 1:1로 대응됨

  • 기계어(Machine code): CPU가 직접 해독하고 설명할 수 있는 비트 단위(0과 1)로 쓰인 컴퓨터 언어로 가장 Low Level Language다. CPU 종류에 따라 서로 다른 코드를 갖게 된다.



Ref.
공부하는 개발자 YouTube
성실하게 준비한 하루 이야기
좋은 개발자가 되자 - 컴파일러, 목적 파일, 바이트 코드....
두리랑 여차저차 개발

profile
개발자로 사는 내 삶은 즐거워 👾

0개의 댓글