컴파일러와 인터프리터

Reading time ~1 minute

컴파일러와 인터프리터의 비교

컴파일러와 인터프리터를 비교해서 정리하고자 한다. 이전에 면접에서 이 질문을 했는데 얼추 비슷한 대답을 했지만 그 당시 정리하지 않고 즉석에서 아는 내용만 말했을 뿐 어수선하게 대답한 경향이 있었다.

하드웨어는 저급언어인 기계어만 인식하고 소프트웨어는 일반적으로 자연어에 가까운 고급언어로 작성된다. 하지만 일부 속도나 크기가 매우 중요하거나 특수한 용도로 사용되는 프로그램의 경우엔 어셈블리어로 작성한다.

고급언어로 작성된 소프트웨어를 컴퓨터에서 실행하려면 컴퓨터가 인식하는 기계어로 변환해야 하는데 이때 하드웨어 계층과 소프트웨어 계층 사이의 언어 변환을 위해 컴파일러나 인터프리터를 사용한다.

컴파일러

고급언어로 작성된 원시 프로그램을 저급언어로 구성된 목적 프로그램으로 변환하는 소프트웨어이다.

고급언어 프로그램 => 컴파일러가 저급언어로 변환 => [기계어 프로그램](실행)

컴파일러의 입력은 원시프로그램이고 출력은 목적 프로그램이다. 컴파일러의 변환은 한 번만 수행되면 목적 프로그램이 만들어 지고, 이 프로그램을 계속 사용할 수 있다. 하지만 변환에 시간이 많이 걸린다는 단점이 있다.

컴파일러의 실행과정

  1. 어휘분석 (lexical Analysis)
  2. 구문분석 (Parsing)
  3. 의미분석 (Semantics Analysis)
  4. 중간 코드 생성
  5. 기계어 코드 생성

즉, 컴파일러를 사용하면 원시 프로그램을 전체적으로 분석하여 변환하므로 많은 시간이 소요되지만, 변환 과정을 한 번만 거치면 항상 실행 파일을 수행할 수 있고, 또한 프로그램을 최적화 할 수 있기 때문에 프로그램의 실행 속도가 빠르다.

일반적으로 고급언어 한 문장은 다수의 저급언어로 대체되어야 동일한 효과를 나타낸다. 저급언어로의 변환 과정이 끝나면 목적 프로그램을 실행을 위해 컴퓨터의 메모리에 적재되어야 한다. 프로그램을 실행하는 동안 원시 프로그램은 더 이상 필요 없기 때문에 메모리에서 제거될 수 있다.

인터프리터

인터프리터는 고급언어에서 하나의 명령어를 분석하여 동일한 효과를 가진 저급언어 명령어로 변환한 후 저급언어 명령어를 실행시키며, 전체 프로그램이 실행될 때까지 이 과정을 반복하는 소프트웨어이다.

[고급언어 프로그램 => 인터프리터가 저급언어로 변환 => 기계어] (실행)

인터프리터 언어로 작성된 소프트웨어는 결과물이 없기 때문에 실행할 때마다 번역작업이 필요하다. 인터프리터를 사용하면 원시 프로그램을 명령어 단위로 변환하고 프로그램 전체에 대해 분석하지 않으므로 변환 시간이 짧다. 그러나 프로그램을 실행할 때마다 변환 과정이 필요하고 프로그램을 최적화할 수 없기 때문에 프로그램의 실행속도가 느리다.

인터프리터의 프로그램 실행 과정

  1. 한 명령어를 메모리에서 가져온다.
  2. 가져온 명령어를 해석한다.
  3. 필요한 데이터를 가져온다.
  4. 명령을 실행한다.

인터프리터 언어는 컴파일러에 비해 상대적으로 작은 소프트웨어이고 새로운 컴퓨터에 프로그램을 이식하기 쉽다.

Dooray!

Dooray CalDav, IMAP 사용법 Continue reading

Vue.js

Published on February 10, 2018

Java_tuning5

Published on March 06, 2017