sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
sitelink5 | |
sitelink6 |
1) "바이트코드"와 가상기계에 대해서 JDK를 설치하면 자바 컴파일러와 JVM이 같이 설치된다. 자바 컴파일러는 "플랫폼에 맞춘 자바 실행 시간환경"에서 실행될 "이진 바이트코드 포맷"을 만들어 낸다. 따옴표로 묶인 두 가지 말속에는 아름다움, 힘, 기능이 담겨 있다. 바이트코드는 본질적으로 코드의 중간형태이다. 다시 말해서 비교적 잚은 자바 언어 문장 집합에서 컴퓨터에서 거의 실행 준비 단계인 긴 중간 기계 명령 집합까지로 구성된다. 다른 말로 하면, 바이트코드 포맷은, 특수한 유형의 컴퓨터와 운영 체제에 적용하는 일부 기계어를 제외하고 보통 컴파일러가 수행하는 토큰화와 코드 생성 작업의 상당부분을 포함하고 있다. 이제 실행 시간 환경이 나설 차례이다. 자바 실행 시간 환경은 자바 컴파일러를 완전히 컴파일된 코드 80%를 취하고, 측정 컴퓨터에서 코드를 실행하는데 있어 플랫폼에 의존적인 나머지 20%를 추가한다. 자바는 수행 도중 자바 바이트코드를 읽고 번역함으로써 이 작업을 수행한다. 바로 이 점이 자바는 컴파일도 되고 해석(interpret)도 된다는 이유이다. 특정 기계에 대해 컴파일한 프로그램은 자바 바이트코드와 같이 중간 형태로 컴파일한 것보다 의심할 여지 없이 더 효율적이기 때문에, 이 구조에서는 성능에 약간의 제한이 따른다. 하지만 이러한 접근 방법에는, 이러한 비효율성을 별 대수롭지 않게 만드는 두 가지 놀라운 이점이 있다. ① 개발자들이 여러 플랫폼에 대해 별도의 버전을 만들어야 할 필요 없이, 자바가 지원하는 모든 플랫폼에 자바 애플리케이션을 만들 수 있다. 대부분 언어의 경우, 여러 플랫폼을 위한 개발은 엄청난 시간이 필요할 것이다. ② 해당 플랫폼에 대한 자바 실행 시간 환경을 사용할 수 있게 되면, 곧바로 자바 애플릿과 애플리케이션을 사용할 수 있다. 2) "컴파일러"와 "인터프리터"에 대하여 컴파일러는 고급 언어 프로그램을 기계어 프로그램으로 번역해 주는 특별한 프로그램이다. 이 프로그램은 고급 언어 프로그램의 각 문장을 적당한 일련의 기계어 명령으로 바꾸어 준다. 컴파일러는 프로그램 전부를 실행 전에 한꺼번에 번역한다. 이에 비해 인터프리터는 프로그램을 한 문장씩 기계어로 번역한다. 이것은 고급 명령어에 대한 해당 기계어 정보를 주는 내장 사전(built-in dictionary)을 이용, 프로그램을 한 줄 씩 번역하는 것을 뜻한다. 인터프리터 언어(interpreted language)를 사용하면 미숙련 프로그래머가 프로그램을 실행 시간동안 고치고 개선하기가 용이하다. 컴파일러를 사용하면 프로그램은 고칠 때마다 다시 번역되어야 한다. 그러나 인터프리터는 문장들이 나타날때마다 매번 번역을 하여야 하기 때문에 느리고, 반면에 컴파일러는 매번 번역할 필요는 없다. 초보자용 언어BASIC번역기의 반 정도가 인터프리터이고, 나머지 반은 컴파일러이다. 인터프리터가 등장한 시기는 컴퓨터의 입력장치가 카드천공방식이었다. 때문에 매우 느린 입력방식에 의해 소요되는 어마어마한 비용(?)과 시간은 당시에는 프로그래밍이라는 것에서 디버깅이라는 작업이 얼마나 값비싼 작업이었는지 유추할 수 있다. 그리고 아직도 디버깅이라는 작업에 있어서 컴파일과 인터프리터의 그러한 장단점을 이용하고 있다. |