" Write Once, Run Anywhere "
" 한 번 작성하면 어느 플랫폼에서나 실행 "
위 문구는 자바의 좌우명이다.
이 글에서는 Java의 좌우명과 직결되는 자바의 특징 중 하나인 플랫폼 독립성에 대해서 정리해보고자한다.
우선, 플랫폼 독립성을 이해하기 위해서는 먼저 반대 개념인 플랫폼 종속성에 대해 이해해 봐야 한다. 플랫폼 종속성의 대표적인 예로는 윈도우, 맥, 리눅스 운영체제의 대표적인 실행 파일인 .exe, .app, .sh가 있다. 실행 파일은 일종의 '기계어 집합'이다. 즉, 컴퓨터가 알아들을 수 있는 명령어들의 집합인 것이다.
윈도우, 맥, 리눅스와 같이 서로 다른 플랫폼을 사용하는 컴퓨터는 서로 다른 기계어를 사용한다. 따라서 다른 플랫폼에서 사용하는 기계어는 알아듣지 못한다.
윈도우 실행 파일인 .exe는 윈도우 플랫폼에서는 동작하지만 맥, 리눅스와 같은 다른 플랫폼에서는 동작하지 않는다. .app과 .sh 실행 파일 또한 마찬가지이다. 이러한 특징을 '플랫폼 종속성' 이라고 한다. 결론적으로, 플랫폼 종속성이란 '하나의 실행 파일은 하나의 특정 플랫폼에서만 실행할 수 있다'는 것을 의미한다.
그렇다면 플랫폼 종속성의 반대 개념인 플랫폼 독립성은 하나의 실행 파일, 즉 프로그램이 모든 플랫폼에서 실행 가능하다는 것을 말한다. 그런데 Java의 실행 파일인 .class 또한 특정 플랫폼만 이해할 수 있는 기계어의 집합인데 어떻게 플랫폼 독립성이라는 특징을 가질 수 있는 것일까? 그것은 바로 자바 가상 머신(JVM; Java Virtual Machine) 덕분이다.
자바 가상 머신은 자바 프로그램 실행 환경을 만들어 주는 소프트웨어이다. 자신의 사용하는 컴퓨터의 운영체제에 맞는 자바 실행 환경(JRE; Java Runtime Environment)을 설치한다면 자바 가상 머신 또한 설치된다.
Java의 경우, Java로 작성된 .java 코드는 컴파일하면 .class 파일이 생성된다. Java의 실행 파일인 .class는 자바 가상 머신이 사용하는 기계어의 집합으로 구성되어 있으므로 자바 가상 머신을 이용한다면 어떤 플랫폼에서도 .class 파일을 실행할 수 있게 된다. 이렇게 해서 자바는 '플랫폼 독립성'이라는 특징을 가질 수 있다.
Reference
- 자바 완전 정복 | 김동형 지음
댓글