[Java #1] 플랫폼 독립성


플랫폼 독립적인 언어, Java


1. 자바

학교의 수업을 통해 처음으로 자바를 접하게 되었다.

자바의 기초적인 문법을 배우면서 C++와 파이썬 두 언어와 유사하다는 생각을 하게되었다.

특히 파이썬과 많이 유사하다는 느낌을 받아서, 파이썬을 주로 사용하는 나에게는 C나 C++를 배울 때보다 좀 더 이해하기 쉬웠던 것 같다.

하지만 이때까지 배웠던 언어들과 확연히 차이나는 특성들 또한 존재했는데, 그것에 대해 찾아본 내용을 정리해보려 한다.


2. 플랫폼 독립성

기존의 언어들로 짜여진 프로그램을 실행시키기 위해서는 소스 코드를 컴파일러(compiler)를 통해 어셈블리어로 변환하고, 변환된 어셈블리어를 다시 어셈블러(assembler)를 통해 기계가 해석할 수 있는 기계어로 변환하여야 한다.

하지만 문제는 하드웨어마다, 제조사마다 기계어의 설계가 다르다는 것이다.

예를 들어 Intel 64비트 CPU와 AMD 64비트 CPU의 기계어 설계는 다르다. 또한 AMD CPU와 퀄컴 CPU는 기계어 설계가 다를 것이다. 심지어, Intel 64비트 CPU와 Intel 32비트 CPU는 서로 기계어 설계가 다르다.

이렇게 CPU제조사마다, 사용 목적(PC, 모바일 등)에 따라서도 기계어의 설계는 다르기 때문에 모든 목적에 대해 각각의 어셈블러(또는 컴파일러)를 만들어야 하며 심지어 운영체제에 따라서도 각각의 실행파일을 따로 만들어야 한다.

compile

하지만 자바는 다르다! 자바의 컴파일러를 통해 바이트 코드(Byte Code)라는 특수한 형태의 중간 코드를 생성해내고 class라는 확장자를 부여한다.

이 class파일은 JVM(Java Virtual Machine)이라는 프로그램을 통해 기계어로 번역되어 실행된다.

이 방식을 통해 단 하나의 소스코드를 통해 class 파일을 생성해서 배포하고, 어느 환경에서나 그 환경에 맞는 JVM만 설치되어 있다면 프로그램을 실행시킬 수 있다는 것이다.

플랫폼 독립성이란, 이렇듯이 하드웨어 또는 운영체제와 같은 플랫폼에 독립적으로 실행 가능한 특성을 가리킨다.







© 2018. by YH

Powered by YH KIM