1. 컴파일러, 인터프리터란?


프로그래머가 작성한 소스코드는 기계가 이해할 수 있는 기계어로 변경해야합니다.

처음 작성된 프로그램은 원시 프로그램(Source program), 변환된 프로그램을 목적 프로그램(Target program)이라 부릅니다.

이러한 번역 또는 해석 과정을 수행하는 것은 운영체제일 수도 있고, 프로그램일수도있습니다.

이러한 번역 과정은 크게 3가지로 나뉩니다.




1-1. 컴파일러 - Compiler


빌드타임

프로그래머가 작성한 모든 소스코드에 대한 기계어를 생성합니다.


런타임

빌드타임때 생성한 모든 기계어를 한 번에 기계로 보냅니다.


특징

빌드타임에 모든 구문 분석과 기계어 변환이 이루어지기 때문에 빌드가 느리고 생성된 기계어는 정적입니다. 하지만 런타임의 경우 특별한 과정이 없어서 속도가 빠릅니다.

기계의 환경에 맞는 컴파일러를 선택해야합니다. C언어의 경우 Linux 환경에서 가장 많이 사용되는 컴파일러는 gcc 입니다. 즉, 운영체제에 종속적이므로 운영체제에 맞는 컴파일러가 필요합니다.


대표언어

C, C++




1-2. 인터프리터 - Interpreter


빌드타임

아무일도 하지 않습니다.


런타임

한 행씩 분석하여 알맞은 기계어를 생성한 뒤 기계로 보냅니다.


특징

실행속도가 느리지만 코드 변경시 즉시 실행이 가능하여 테스트에 용이합니다.


대표언어

Visual Basic, PHP




1-3. JIT(Just In Time)


빌드타임

런타임에서 실행할 수 있는 중간언어로 변환합니다.

Java의 경우 소스코드(.java)를 Javac.exe(Java 컴파일러)를 이용해서 JVM(Java 가상머신)이 이해할 수 있는 중간언어인 바이트코드(.class)로 변경합니다.


런타임

중간언어를 기계어로 변환하여 기계로 보냅니다. 기계어를 생성할 때 캐싱을 통해 같은 함수가 여러번 불려도 기계어를 계속 새롭게 생성하지 않고 기존에 만들어 놓은 기계어를 불러옵니다. 중간언어를 기계어로 변경하는 런타임시 시간이 오래걸립니다.

Java의 경우 Java.exe가 Java의 인터프리터로서 중간언어로 생성된 바이트코드(.class)를 기계어로 해석하고 실행합니다.


특징

어떤 운영체제에서도 같은 컴파일러로 중간언어를 만들기 때문에 운영체제에 독립적입니다. 어떤 상황에서도 같은 의도를 가진 소스코드를 작성할 수 있습니다. 운영체제에 맞는 중간언어를 기계어로 변경하는 프로그램(JVM, .NET Framework 등)이 필요합니다. 즉, 플랫폼의 제약이 없습니다.


대표언어

Java, C#



출처: http://cocomo.tistory.com/499 [Cocomo Coding]

'Java' 카테고리의 다른 글

[설치] OpenJdk 설치  (0) 2019.01.05
[이론] JDK, JRE, JVM ?  (0) 2019.01.05
전자 정부 프레임워크 context-idgen.xml  (0) 2018.08.01

+ Recent posts