Java 코드가 화면에 출력되기까지 기본 과정
컴퓨터는 사람과 데이터를 저장하는 방식이 다르다. 사람은 이미지는 이미지대로, 동영상은 동영상대로, 음성은 음성대로 기억 속에 저장한다. 그러나 컴퓨터는 이 데이터들을 오로지 1과 0으로 저장한다. 때문에 컴퓨터와 사람은 사용하는 언어가 다를 수밖에 없다. 컴퓨터가 사용하는 언어를 기계어라고 생각하면 좋겠다.
기계어란 CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰여진 컴퓨터 언어를 통틀어 말한다.
기계어는 말한 것처럼 1과 0으로 쓰여 있기에 사람이 이를 해석하기가 쉽지 않다. 따라서 중간에서 기계어와 사람의 언어를 통역하는 언어가 또 존재하는데 이를 프로그래밍 언어라고 한다.
Java는 이 프로그래밍 언어의 일종이다.
세상에는 수많은 프로그래밍 언어가 있다. 그러나 Java는 뭐가 다르기에 개발자가 아닌 사람들조차 들어보게 되는 것일까?
Java는 James Arthur Gosling이라는 사람이 썬 마이크로 시스템에 다니던 때 만들었다.
당시 썬 마이크로시스템즈는 모든 하드웨어에 적용 가능한 객제 치향 언어 체제를 만들기를 원했다. 이 당시 썬 마이크로시스템즈의 Green Project Team에 소속돼 있던 James는 모든 전자 제품에 적용이 가능한 객체 지향 언어인 Oak를 개발하게 된다.
* Green은 문 사무실의 문이 초록색이라 Green으로 지었다고 한다.
* Oak는 사무실 바깥의 오크나무에서 따다 Oak로 지었다고 한다.
처음에 Oak를 개발했으나 Oak란 이름이 이미 사용 중인 것을 알고 평소에 좋아하던 커피의 이름인 Java를 프로그래밍 언어로 결정했다고 한다.
Java의 가장 큰 특징은 어떤 운영체제에서든 실행이 가능하다는 점이다. 운영체제는 Windows, Mac, Linux 등 그 종류가 다양하다. 이 때문에 원래는 각 운영체제에 맞게 다른 식으로 코드를 만들어줘야 한다. 현재 안드로이드 앱이 아이폰에서 동작하지 못하는 것과 마찬가지다. 똑같은 작업을 각각의 운영체제마다 새로 만들어야 하는 이 번거로움을 Java가 해결해줬기 때문에 엄청난 혁신이었다고 말할 수 있다.
이처럼 Java가 운영체제가 달라도 같은 코드를 이용할 수 있는 이유는 VM(Virtual Machine), 즉 가상머신 덕분이다. Java는 컴퓨터의 운영체제에 맞는 VM에 코드를 올려 그 코드가 운영체제에 맞게 해독하도록 변경해준다.
Java의 동작 과정을 도식화하면 다음과 같다.
1. 먼저 소스코드를 작성하고 저장한다. 필자는 편의상 메모장에 작성하고 저장했다.
2. 컴파일러로 컴파일을 진행한다. 컴파일 전에는 소스코드 형태로 *.java 파일로 저장된 상태다. 컴파일을 커치게 되면 소스코드가 바이트코드로 전환되며 *.class파일로 저장된다.
3. 바이트코드로 바뀌면 이제 VM에 코드를 띄울 수 있게 된다. VM에 코드를 띄우기 위해 명령어로 [java Hello]를 입력했다.
4. Java가 OS에 맞는 VM을 선정한다. VM은 *.class에 저장된 바이트코드를 기계어로 번역한다.
5. VM이 번역해준 기계어를 OS가 번역하여 CPU에 전달되고 결과적으로 화면으로 출력되게 된다.
Java는 이처럼 VM이 중간에 한 단계로 삽입되게 되면서 편의성을 극대화 시켰다고 볼 수 있다.