Kotlin

[Kotlin] JVM, Kotlin 컴파일 과정

KyungMin08 2024. 12. 2. 11:38
728x90

개요

필자는 Kotlin이 어떻게 컴파일되고 어떻게 Java와 100% 상호운영성이 되는지 궁금해서 포스팅을 한다. 😁 요즘들어 개발보다는 원리를 많이 공부하는 것 같다.

 

우선 Kotlin 실행 과정보다 Java가 어떻게 돌아가는지를 알아보자. 왜냐하면 Java의 실행 과정을 알아야 Kotlin 실행 과정을 이해할 수 있기 때문이다.


JDK, JRE, JVM

자바를 실행하기 위해서 JDK를 설치하라고 한번쯤은 들어봤을거다. 왜냐하면 JDK는 자바를 위한 모든게 들어 있기 때문이다.

 

1. JDK

JDK는 Java Development Kit의 약자로 자바 애플리케이션을 개발하기 위해 필요한 도구들이 많이 모여 있는 곳이다. JDK를 설치하면 자동적으로 JRE, JVM이 설치된다.

기본적으로 자바 컴파일러, 런타임 환경, 개발 도구등이 있다.

  • 자바 컴파일러 : 자바 코드를 바이트 코드로 변환한다.
  • 자바 런타임 환경 : 실행하기 위해 필요한 환경 설정이 포함되어 있다.
  • 자바 개발 도구 : 디버깅, 문서화등 개발 과정을 지원하는 도구들이 제공된다.

 

2. JRE

JRE는 Java Runtime Environment의 약자로 자바 애플리케이션을 실행하기 위해 필요한 최소한의 실행 환경을 제공한다. 이 안에는 JVM과 기본 자바 라이브러리들이 포함되어 있다.

  • 자바 클래스 라이브러리 : 개발자들이 자주 사용하는 클래스들을 제공한다.
  • JVM : 바이트 코드를 기계어로 변환하고, 메모리 관리와 프로세스 관리를 하며 자바 애플리케이션을 실행한다.

 

3. JVM

사실 제일 중요한 JVM은 Java Virtual Machine의 약자로 자바 바이트 코드를 실행하기 위한 가상 머신이다. OS에 종속받지 않고 CPU가 자바를 인식하고 실행할 수 있도록 하는 가상의 컴퓨터이다. 이 때문에 "독립적"이라는 장점을 갖는다. 이제 JVM 자바를 어떻게 컴파일하는지 알아보자.

자바는 항상 JVM을 거쳐서 실행된다. 거치지 않으면 java를 실행 할 수 없기 때문이다.

개발자가 자바 코드(.java)를 작성하면 자바 컴파일러에 의해 바이트 코드(.class)로 변환한다. 그 다음 JVM에 의해 각 OS가 알 수 있는 기계어로 번역해서 실행한다. 여기서 바이트 코드(ByteCode)는 JVM이 이해할 수 있는 기계어이다.

javac(Java Compiler)는 JDK를 설치하면 bin에 존재하는 javac.exe 또는 javac 실행 파일이다. 즉, 명령어를 통해 .class 파일로 컴파일 할 수 있다는 걸 의미한다.

변환된 .class 파일은 기계어가 아니기 때문에 OS가 해석 할 수 없다. 이 때문에 JVM이 변환된 .class 파일을 각각의 OS가 해석할 수 있는 기계어로 변환한다. 이러한 작업 때문에 OS로부터 독립적이라는 말이 생겼다.

정리하자면

  • *.java : 개발자들이 작성한 자바 코드
  • *.class : 자바 컴파일러에 의해서 JVM이 해석할 수 있는 기계어로 번역된 바이트 코드
  • JVM : 바이트 코드를 해당 OS에 맞게 번역해주는 가상 머신

다른 언어들은 OS에 따라 다른 환경 설정등을 해줘야 했었는데 자바는 JVM에 의해서 OS에 종속받지 않으니 얼마나 좋나.


Kotlin Build 과정

Kotlin은 자바와 마찬가지로 JVM 위에서 동작하기 때문에 자바 컴파일 과정과 비슷하다. *.kt 파일은 코틀린 컴파일러(Kotlin Compiler)를 통해 바이트 코드(*.class 파일)로 변환되고 Kotlin Runtime Library에 의존하여 실행된다.

Kotlin Runtime Library는 Kotlin 표준 라이브러리, Java API를 확장한 내용이 있다.

어떻게 컴파일되는지 정도만 알자.

(설명 보충 필요)


잘못된 내용이나 부족한 부분이 있을 수 있습니다. 댓글로 남겨주시면 감사하겠습니다. ☺️

728x90