Compiler vs Interpreter

2022. 3. 22. 16:42

우리는 프로그래밍을 할 때, Java, C, Python 같은 high level langauge(고급 언어)를 사용한다.

하지만 이러한 high level language는 사람이 이해하기는 쉽지만, 하드웨어는 이를 이해하지 못한다.

하드웨어는 machine language(기계어)만을 알아들을 수 있기 때문이다.

따라서, 개발자가 작성한 프로그램을 하드웨어가 이해할 수 있도록 변환하는 작업이 필수적인데,

이러한 작업을 하는 것이 바로 Compiler와 Interpreter이다.

 

1. Compiler란?

- 프로그램 runtime 이전에 소스 코드를 검사, 후에 machine language로 변환한다.

   -> 따라서 만일 오류가 있다면, 실행 전에 오류를 발견할 수 있다. 

- 소스 코드를 검사하는데에 많은 시간이 들지만, 전체 실행 시간은 빠르다.

- C, C++ 같은 언어들은 compiler를 이용한다.

 

2. Interpreter란?

- 프로그램 runtime에 한번에 한문장씩 변환한다.

- 첫 오류를 만날 때까지 프로그램을 번역하고 따라서 오류를 발견하기 어렵다.

- High level langauge를 Interpreter가 해석할 수 있는 Bytecode라는 이진 표현법으로 먼저 변환한 다음,

  Bytecode를 Interpreter가 변환하여 machine language로 변환한다.  

- Python, Javascript 같은 언어들은 Interpreter를 이용한다. 

 

3. Compiler vs Interpreter

- semmentic gap이란 프로그래머들이 사용하는 High Level Language와 컴퓨터 하드웨어 사이의 거리를 의미한다. 

  이 semmentic gap이 큰 언어들은 Interpreter를 사용하고 작은 C나 C++ 같은 언어들은 compiler를 이용한다. 

- Interpreter는 Compiler에 비해 execution 은 매우 빠르다.

- Compiler는 Interpreter에 비해 translation 이 매우 오래걸린다. 

- Interpreter는 코드를 수정하고 즉시 실행할 수 있지만 Compiler는 코드를 수정하고 실행하려면 compile을 다시 해야한다. 

- Compiler는 OS 호환성이 낮지만 Interpreter는 OS 호환성이 높다.

 

4. Java는 Compile 언어 or Interpreter 언어?

결론부터 말하자면, 둘 다이다.

Javac Compiler는 .java 파일을 중간 코드인 Bytecode로 변환하여 .class 파일을 생성한다.

Java virtual machine은 .class 파일 내의 Bytecode를 Machine language로 변환한다.

Bytecode는 JVM(java virtual machine) 위에서 OS 상관없이 실행된다.

따라서 Java는 Compiler 방식과 Interpreter 방식 두가지를 다 사용하므로, Hybrid Implementation System을 사용하며 Hybrid Language 라고 불린다. 

 

4-1. JIT

Java의 이 방법은 Compile 언어와 Interpreter언어의 장점 두 가지를 다 가질 수 있지만 속도가 느리다는 단점이 있다.

그래서 나온 방법이 Just In Time Compilation이다.

자주 쓸만한 코드들을 미리 기계어로 변환시켜 저장해 뒀다가, 이미 변환된 기계어 코드를 재사용하는 것이다. 

 

 

 

 

 

'Computer Base' 카테고리의 다른 글

Framework vs Library  (0) 2023.03.17
캐싱, 웹캐싱, 쿠키  (0) 2023.03.13
Forward Proxy & Reverse Proxy  (0) 2023.03.13
[Computer Architecture] Multilevel Cache & Virtual Memory  (0) 2022.07.05
Concurrent Processing vs Parallel Processing  (0) 2022.05.10

BELATED ARTICLES

more