CS & SW & IT 용어

Compiler & Interpreter

Haksae 2021. 12. 24. 03:41

1. Low-level & High-level Language

1) Low-level Language

  • 컴퓨터가 이해하기 쉽게 작성된, 하드웨어와 더 밀접한 언어를 뜻한다.
  • 실행 속도가 매우 빠르지만 배우기가 어렵고, 유지보수가 힘들다.
  • Machine language(기계어) 또는 Assembly language(어셈블리어)가 저레벨 언어에 해당한다.

2) High-level Programming Language

  • 사람이 이해하기 쉽게 작성된 프로그래밍 언어
  • 저레벨 언어보다 가독성이 높고 다루기가 쉽다는 장점이 있다.

3) compile

Compile이란 고레벨 프로그래밍 언어로 쓰여진 프로그램으로 작성된 소스코드를 오브젝트 코드로 변환하는 것을 뜻한다.
  • 명령어 실행을 위해서는 저레벨 언어인 기계어로 쓰여져야지만, 하드웨어 제어가 가능하다.
  • 따라서 고레벨 프로그래밍 언어로 쓰여진 프로그램으로 작성된 소스코드를 기계어로 변환시켜주어야한다. 이것을 compile이라고 한다.
  • 오브젝트 코드란, 컴파일러에 의해 생성된 코드를 의미한다.
👉🏻 컴파일러와 인터프리터는고레벨 언어로 작성된 프로그래밍 언어를 기계어로 변환시켜준다. 그러나 그 과정에 있어서 차이점을 보인다.

2. Compiler & Interpreter

1) Compier

  • 컴파일러는 고레벨 언어로 작성된 프로그램 전체를 오브젝트 코드로 번역한 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생성한다.
  • 컴파일러는 compile을 런타임 이전에 어셈블리 언어로 한 번에 변환하기 때문에, 번역 시간이 오래걸리지만, 한번 번역한 후에는 다시 번역하지 않으므로 실행 속도는 인터프리터에 비해 빠른 편이다. 
  • 컴파일러는 전체 소스코드를 변환한 뒤 에러를 보고한다.
  • 컴파일러의 대표적인 언어에는 C언어가 있다.

2) Interpreter

  • 인터프리터는 컴파일러와는 다르게 소스 코드를 한 줄 단위로 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 실행시킨다.
  • 프로그램이 직접 실행됨으로 오브젝트 코드가 생성되지 않아서, 컴파일러에 비해 번역 시간이 빠른 편이다.
  • 하지만 번역을 할 때 실행 파일을 생성하지 않기 때문에, 매번 실행할 때마다 같은 번역을 진행해야한다. 매번 번역을 거치기 때문에 컴파일러에 비해 실행 속도가 느린 편이다.
  • 줄 단위로 번역, 실행되기 때문에 실시간 디버깅 및 코드 수정이 가능하다는 장점이 있다.
  • 인터프리터는 각 행마다 실행하는 도중 에러가 보고되면 이후 작성된 코드를 살펴보지 않는다. (보안적인 관점에서도 도움이 된다)

Compiler vs Interpreter

*컴파일러와 인터프리터의 근본적인 차이
- 컴파일러는 전체 소스코드를 보고 명령어를 수집하고 재구성하지만, 인터프리터는 소스코드의 각 행을 연속적으로 분석하며 실행한다.
- 인터프리터는 고레벨 언어를 바로 기계어로 번역하지 않고 중간 형태로 변환시킨 후 실행한다. 반면 컴파일러는 고레벨 언어를 바로 기계어로 변환한다.