C언어로 작성한 코드를 컴파일하면 네이티브 코드(native code)가 된다. 네이티브 코드는 managed code로도 불린다. 과거의 프로그래밍은 대부분 네이티브 코드로 진행되었다. 컴파일하면 CPU가 해석할 수 있는 기계어로 번역이 되는 방식인데, 이런 방식에서 프로그래머는 여러 문제를 신경써야 한다. 대표적인 예로 메모리 누수와 이식(porting)이 있다.
OS는 하드웨어에 따라 다르므로 다른 OS로 옮길 때(porting이라 함) 번거롭다. 소스는 비슷하더라도 컴파일 결과는 OS에 종속적이기 때문에 번거로울 수 밖에 없다.
그래서 OS에 독립적인 프로그래밍을 위해 만들어진 것이 Java다. Java로 만들어진 프로그램은 어떤 OS에서도 실행할 수 있는데, 이를 ⒜WORA 또는 이식성이 좋다고 한다. 한 번 소스 코드를 작성하면 Windows, Linux, Mac 등 모든 OS에서 실행할 수 있다.
이것이 가능한 이유는 Java 소스가 컴파일 시 네이티브 코드가 아닌 바이트 코드(byte code)를 실행하기 때문이다. 바이트 코드는 일종의 ⒝임시 코드로, 실제로 OS에서 실행할 수는 없고, ⒞JIT 컴파일러가 OS에 맞는 코드로 변환해야 비로소 실행할 수 있다.
어쨌든 이는 기존의 프로그램들과 다른 특징이므로 기존의 프로그램을 native code, 새로운 프로그램을 managed code라고 부르게 된 것이다.
Managed code의 특징은 다음과 같다.
① 객체 지향 모델: Java 등의 언어는 OOP로 설계되어 있다.
② 언어에의 독립성: 어떤 언어로 작성하든 상관없다.
③ 형 안정성: 변수의 형(type)을 엄격하게 제한한다.
④ Garbage Collection: 프로그래머가 직접 메모리를 해제하지 않아도 알아서 가비지 객체를 메모리에서 해제한다.
⑤ 단일 통합 라이브러리: 플랫폼 레벨에서 많은 API를 제공한다.
다만 managed code는 native code에 비해 실행 속도가 느리고, Java의 경우 JVM이 설치되어 있지 않으면 실행할 수 없다는 단점이 있다.
⒜WORA(Write Once, Run Anywhere): 자바 가상 머신이 장착된 어떤 장비에서도 실행될 수 있음을 의미한다.
⒝임시 코드: Intermediate Language code.
⒞JIT 컴파일러(Just In Time Compiler): 프로그램을 실제로 실행하는 시점에 기계어로 번역하는 방식으로,
동적 번역(Dynamic translation)이라고도 한다.
'Programming > Java' 카테고리의 다른 글
예외 처리 (0) | 2019.07.06 |
---|---|
JVM (0) | 2019.07.04 |
IO 입출력 (0) | 2019.05.23 |
자바에서의 배열 선언 및 초기화 (0) | 2019.05.08 |
BigInteger 클래스 (0) | 2019.04.17 |