자바가 플랫폼에 독립적이라는 말을 이해하기 위해서는 먼저 프로그래밍 언어가 무엇이고 프로그래밍 언어가 어떻게 컴파일이 되는지를 알아야 한다.
프로그래밍 언어(Programming language)
프로그래밍 언어란 컴퓨터 시스템을 구동시키는 명령이나 연산을 시킬 목적으로 설계되어, 소프트웨어를 작성하는 형식 언어로, 주로 고급 언어일수록 사람이 사용하는 언어에 가깝다.
그 결과, 사람이 원하는 작업을 컴퓨터가 수행할 수 있도록 프로그래밍 언어로 일련의 과정을 작성하여 일을 시킨다.
즉, 이러한 프로그래밍 언어는 기계와 의사소통을 할 수 있게 해주는 언어를 뜻한다.
package org.java.helloWorld;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
기계어
기계어는 컴퓨터가 사용하는 언어이다. 좀 더 구체적으로 이야기하면 컴퓨터의 CPU가 명령을 처리할 때 사용하는 언이고, 아래와 같이 이진화된 숫자(2진법)로 구성되어 있다.
1000 1011 0100 0101 1111 1000
1000 0011 1100 0100 0000 1100
0000 0011 0100 0101 1111 1100
기계어도 프로그래밍 언어이기 때문에 기계어에 익숙해지면 위와 같이 기계어를 나열해 프로그래밍 할 수 있다. 하지만 저런 코드를 사람들이 이해하고 수정하는 작업은 무척이나 어렵다. 따라서 사람들은 기계어를 사용하지 않고 프로그래밍언어를 사용하여 컴퓨터에게 작업을 지시한다.
컴파일 언어
이러한 기계어의 특성으로 인해 고급 언어로 된 소스코드를 저급언어로 번역하는 과정이 필요하다. 이것을 컴파일(Compile)한다고 하고 번역을 하는 프로그램을 컴파일러(Compiler)라고 한다. 여기서 고급 언어는 프로그래밍 언어로 C, C++, JAVA 등이 이에 속한다. 저급 언어는 컴퓨터 내부에서 바로 처리 가능한 프로그래밍 언어로 기게어와 어셈블리어 등이 이에 속한다.
컴파일 언어는 컴파일러를 통해 컴파일 타임에 소스 코드를 실행 하기 전 미리 번역 해두어 전체 소스 코드를 한 번에 기계어로 변환 후 실행시에 컴퓨터에게 전달한다. 컴파일러 언어는 컴파일 단계와 실행 단계가 각각 분리되어 있으며, 컴파일은 단 한번만 수행한다. 실행은 실행 파일을 실행시킴으로써 할 수 있으며, 실행시에는 컴파일 과정을 거치지 않고 실행만 하면 되므로 코드 실행 속도가 빠르다.
C의 컴파일 과정
위의 과정은 일반적인 언어들의 컴파일 과정을 나타낸 것이다. 우리가 생성한 code를 컴파일 과정을 거쳐 기계어로 변환하여 컴퓨터에 명령을 내린다. 이 과정을 이해했으니 이제 자바가 플랫폼에 독립적이라는 게 무엇을 의미하는 지 알아보자.
일단 C의 컴파일 과정을 알아보자.
일반적으로 C언어는 운영체제 마다 서로 다른 컴파일러는 두어 각 운영체제에 맞는 컴파일 과정을 실행해야 한다. 윈도우와 리눅스는 서로 컴파일된 기계어를 호환하지 않고 맥과 윈도우, 맥과 리눅스 등도 마찬가지이다. 따라서 각각의 운영체제마다 서로다른 각각의 컴파일러를 두어야 하는 불편함이 있다. 하지만 자바는 이것을 해결하기 위해 JVM 사용한다.
이제 자바의 컴파일 과정을 알아보고 JVM이 무엇인지 간단하게 알아보겠다.
JAVA의 컴파일과 JVM
위의 그림을 설명하자면, 우리가 작성한 프로그램 언어로 작성한 소스코드는 .java 파일로 저장된다. 그리고 자바 컴파일러(javac)가 소스코드를 컴파일하여 자바 바이트코드(Java Bytecode)로 변환한다. 이 바이트코드는 .class 파일로 저장되며, JVM(Java Virtual Machine)은 이 바이트코드를 해석하여 기계어로 변환하여 실행한다.
JVM은 각각의 운영체제에 맞는 코드로 변환해주기 때문에, 각 운영체제에 맞는 JVM만 설치되어 있으면, 추가적인 컴파일러 없이도 자바 프로그램을 실행할 수 있다. 따라서 자바는 특정 운영체제에 종속되지 않고, 한 번 작성된 코드가 다양한 플랫폼에서 실행될 수 있기 때문에 "자바는 플랫폼에 독립적이다"라는 말이 성립하게 된다.
JVM
JVM은 'Java Virtual Machine' 으로 자바 프로그램을 실행하기 위한 가상 머신이다. JVM의 주요 기능은 로딩, 바이트 코드 검증 및 실행, 메모리 관리 등등 다양하다. JVM의 더 이상의 설명은 다른 개념에 다시 JVM이 연계 되었을 때 설명하도록 하고 이번 포스팅에선 이 정도만 알아보는 것으로 한다.
'Java' 카테고리의 다른 글
char 자료형의 재밌는 특징 (feat. 문자 인코딩 - 아스키코드, 유니코드) (3) | 2024.07.15 |
---|