자바2016. 1. 21. 21:52

소스코드, 바이트코드, 기계어(오브젝트코드나 네이티브코드도 기계어이다. 다만 오브젝트코드는 완성된 하나의 프로그램이 아닌 부분적 코드를 의미한다.) 모두 언어이며 그 추상성에 따라 달라진다. 소스코드가 가장 추상적이며 기계어가 가장 구체적이라고 할 수 있다. 기계어로 a,b,c,d라는 명령어가 있다고 하자. 근데 우리가 a, b라는 2개의 기계어 명령어인 a,b를 자주 쓴다고 하자. 그러면 사람 입장에서는 z라고 입력하면 기계어 명령어 a, b가 한 번에 입력되면 간편하다고 생각할 것이다. 이렇게 중간언어를 하나 만들 수 있다. 추가로 c, d를 조합한 x라는 중간언어도 하나 더 만들자. 마찬가지로 중간언어 중에서 z와 x를 연속해서 자주 쓴다고 하자. 편리를 추구하는 사람들은 k를 입력하면 z, x가 연속으로 입력되게 만들었다. 이 k가 소스코드이다. 이 중간언어가 바이트코드이다. 바이트코드는 자바머신을 조작하기 위해사용된다. 하드웨어(기계어)>운영체제>자바가상머신(바이트코드)>소스코드 순으로 이해하면 된다.



자바머신이란 일종의 번역기로 생각하면 된다. 사람들은 먼저 가장 사용하기 쉬운 소스코드를 작성하고 이 소스코드는 자바컴파일러를 통해 바이트코드로 변한다. 바이트코드는 자바머신을 통해 기계어로 변환되고 하드웨어에 직접 명령을 내리게 된다.. 가상머신을 사용하는 장점을 살펴보기 위해 가상머신을 사용하지 않는 다른 사례들을 먼저 살펴보자. 컴파일러를 통해 기계어로 바로 변환되는 다른 언어들을 살펴보면 다른 언어의 실행파일은 하드웨어가 변경되면 사용이 불가능하다. 그러면 다른 하드웨어에서 새롭게 컴파일을 해야할 것이다. 하지만 자바는 컴파일러를 통해 바이트코드로 변경되므로 운영체제에 자바머신을 설치하였다면 이 실행파일은 그 자바머신이 설치된 어떠한 하드웨어에서도 사용될 수 있다. 

API는 프로그램과 운영체제 소통을 가능하게 하는 것으로 예를 들어 자바프로그램을 개발하며 윈도우api를 사용한다면 윈도우 운영체제에서 지원하는 각종 기능을 사용할 수 있으며 정보의 교환이 가능하다.