
java 의 컴파일 과정에 대해서 정리해봅시다.
C언어는 소스를 구현하고 맥OS, 윈도우 OS용 컴파일러가 필요하다. 하지만 자바는 각각의 OS 별 컴파일러 없이 하나의 컴파일러로 모든 OS를 지원하는 특징이 있습니다.
java compiler를 통해 java 파일을 Bytecode 로 이루어진 파일(class) 반기계어를 만들어 모든 OS 에서 사용이 가능한 것입니다.
이때 class파일 (반기계어는) Bytecode 이기 때문에 컴퓨터가 읽을 수 없습니다. 컴퓨터가 class 파일을 읽을 수 있도록 JVM(자바 가상 머신)을 통해 완전한 기계 코드로 변경하여 컴퓨터가 읽을 수 있도록 헤줍니다.
java 컴파일 순서는 다음과 같습니다.
1. 개발자가 .java 파일을 생성합니다.
2. 빌드를 합니다.
3. java compiler의 javac 명령어를통해 Bytecode(class 파일)을 생성합니다.
4. Class Loader를 통해 JVM 내로 로드합니다.
5. JVM 내에 있는 실행 엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석되어 Runtime Data Area에 배치됩니다.
자바의 가장 큰 특징이 위에서 이야기 한 것과 같이 어떠한 OS든간에 java가 설치되어 있다면 JVM에 의해서 .java 파일이 기계어로 해석될 수 있다는 점입니다.
이제 compiler 와 Interpreter 차이점에 대해서 알아보겠습니다.
컴파일에 대헤서 알아보기 전에 컴파일에 대해서 이해하기 위해선 어셈블리어에 대해서 알고 넘어가야합니다.
어셈블리어란 무엇일까요? 어셈블리어의 정의는 어셈블리어(영어: assembly language) 또는 어셈블러 언어(assembler language)는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다.
즉 기계어와 일대일 대응이 되는 컴퓨터 언어이기 때문에 컴퓨터 구조에 따라 사용하는 기계어가 달라지며 따라서 기계어에 대응이 되는 어셈블리어도 계속 만들어야 합니다.