Interpreter언어와 Compiler 언어

|

개인적인 연습 내용을 정리한 글입니다.
잘못된 내용이 있다면 편하게 댓글 남겨주세요!


Compiler / Interpreter 차이

  • 두 언어의 가장 큰 차이점은 컴파일 시점이다.
    • 즉, 런타임 전에 컴파일을 하는지 안하는지 그게 가장 큰 차이점이다.

컴파일 언어(Compiled Language)

  • 예: C, C++, JAVA
  • 컴파일 언어는 런타임 이전에 기계어로 변환되는 언어이다.
    • 자바의 경우 런타임 이전에 컴파일을 통해 기계어가 아닌 바이트어로 변경되지만, 컴파일 시점이 존재하여 컴파일 언어라고 한다.
  • 전체 소스코드를 보고 명령어를 수집하고 재구성한다.

인터프리터 언어(Interpreter Language)

  • 런타임 중에 프로그램을 한줄한줄 연속적으로 해석하며 실행하는 언어이다.
  • 파이썬의 경우 런타임 중 컴파일 과정에서 렉서(lexer), 파서(parser)를 거쳐 바이트 코드를 만들어낸다.
    • lexer: 요소를 하나하나 쪼갠다, parser: 구문 분석

두 언어의 특징 및 차이점

  1. 컴파일러는 소스코드 전체를 한번 훑고 컴퓨터 프로세서가 실행할 수 있도록 바로 기계어로 변환한다. 인터프리터는 고레벨 언어를 중간 코드로 변환하고 이를 각 행마다 실행한다. 이 중간 코드는 다른 프로그램에 의해 실행된다.

  2. 일반적으로 컴파일러가 각 행마다 실행하는 특성을 가진 인터프리터보다 실행시간이 빠르다.

  3. 컴파일러는 전체 소스코드를 변환한 뒤 에러를 보고하지만, 인터프리터는 각 행마다 실행하는 도중 에러가 보고되면 이후 작성된 코드는 살펴보지 않는다. 이는 보안적인 관점에서 도움이 된다.