케네스로그

[Java] 자바의 컴파일 과정 본문

Dev/Java

[Java] 자바의 컴파일 과정

kenasdev 2021. 10. 4. 15:09
반응형

 

기존의 문제🥲

한개의 소스코드를 실행하기위해 사용자환경에 따라 여러 개의 컴파일러가 필요함.

이전에 전통적인 언어의 컴파일과 프로그램 실행과정에 대해 알아보았다. 기존의 문제는 사용자의 프로그램 실행 환경에 맞춰서 다양한 버젼의 프로그램 개발이 필요로 했다는 점이다. 또한, Windows에서 컴파일하여 생성한 실행파일은 오직 Windows머신에서만 실행이 가능하다. 

 

컴퓨터의 동작 과정

컴퓨터는 어떻게 동작하나? 전기적 신호부터.. 컴퓨터는 연산을 수행할 수 있는 전기적 장치를 말한다. 여기서, '전기적'이라는 의미는 전기적인 신호를 인식할 수 있다는걸 뜻한다. 전기적 신

93jpark.tistory.com

 

 

Java의 등장 ☕️

Java는 Virtual Machine(가상머신)이라는 개념의 프로그램을 통해 Java프로그램을 실행한다. 개발자들은 가상머신에 맞춰 개발을 진행하고, 사용자는 본인의 실행환경에 맞는 가상머신 프로그램만 구비하면 프로그램을 어디서든 똑같이 실행할 수 있는 것이다. 이렇게 자바는 WORA (Write Once Run Anywhere)라는 슬로건을 내세우며 등장했으며, 개발자와 사용자들은 열광했다.

 

 

Java 컴파일 과정

1. 모든 소스코드는 .java포맷의 파일로 작성된다.

2. javac 컴파일러는 자바코드를 .class파일로 컴파일한다. 이 때, .class파일은 JVM이 이해할 수 있는 바이트코드(bytecode)로 이루어진다.

3. JVM의 인터프리터와 JIT 컴파일러는 바이트코드를 각 OS가 실행할 수 있는 기계어로 변환시킨다.

4. 프로세서는 기계어에 따라 동작을 수행한다.

 

바이트코드란?

바이트코드(bytecode)는 JVM이 이해할 수 있는 저수준 언어이다. .java파일을 컴파일 한 결과로 생성된 .class파일은 바이트코드로 이루어져있다. 기존의 언어의 컴파일 결과로 생성되는 오브젝트파일(.obj)과 달리, 바이트코드(.class)는 모든 플랫폼의 JVM에서 실행가능하다. Windows환경에서 생성된 바이트코드는 Mac환경에서도 실행이 가능하다는 것이다. 물론, Java가 설치되어 있어야만 한다.

 

Java로 작성된 소스코드

위의 Java로 작성된 소스코드를 javac컴파일러를 통해 .class파일을 생성한다. 생성된 클래스파일은 바이트코드로 작성되어있을 것이다. 바이트코드의 민낯을 보기위해 열어보면 다음과 같이 변환되어 있다. 기존의 어셈블리어와 유사한 모습을 보이고 있다.

javac컴파일러를 통해 컴파일된 .class파일의 바이트코드

바이트코드 확인하는 방법🔎
javap -c (.class file) 명령을 통해 바이트코드를 확인할 수 있다.
javap명령은 클래스파일의 필드, 생성자, 메소드를 출력한다.
왜 '바이트코드'라고 할까?🤔
각 바이트코드는 1byte크기의 opcode로 이루어져있다. 그렇기에 바이트코드란 이름으로 명명되었다. 더 자세한 설명은 이곳을 참조하자.

 

 

반응형