테크레터

테크레터 3편. 컴파일러와 인터프리터의 차이는 무엇인가요?

chandlerxx 2023. 12. 19. 21:48

오늘은 기본적인 용어에 대해서 간략하게 살펴보도록 하겠습니다.

 

1. 컴파일러


(위키백과에 따르면)

컴파일은 고급 프로그래밍 언어를 실행 프로그램으로 만들기 위해 저급 프로그래밍 언어로 변환하는 과정을 의미합니다.

컴파일러는 개발자가 작성한 소스 코드를 컴퓨터가 수행하기 위한 코드로 변환해주는 일종의 툴 입니다. 

대표적으로 자바 컴파일러를 예로 들 수 있습니다.

출처 : https://velog.io/@hosunghan0821

 

 

이때 고급/저급 언어는 아래와 같이 이해하시면 됩니다.

  • 고급언어 : 사람이 이해하고 작성하기 쉽게 만들어진 언어로, 개발자들의 소스 코드가 이에 해당되고요. (C/C++언어)
  • 저급언어 : 컴퓨터가 이해하고 실제 동작을 수행하기 위한 언어로, 작성된 소스 코드가 변환되어야 합니다. (0, 1 조합의 기계어) 

특징으로는

  • 컴파일 단계를 반드시 거쳐야하며 완성된 실행파일은 컴퓨터에서 빠르게 실행해볼 수 있습니다.
    ㄴ 다만, 소스 코드의 크기가 커진다면 그에 따라 컴파일 시간이 길어질 수 있습니다. 
  • 0과 1로 된 기계어로 변환되었기에 서비스 소스 코드가 유출되지 않습니다. 
  • 단, 문법적인 에러로 인해 컴파일 단계에서 컴파일 에러가 발생하게 된다면, 실행 자체가 불가능합니다.
    ㄴ 에러를 초기에 발견할 수 있다는게 장점입니다.

 

2. 인터프리터


(위키백과에 따르면)

인터프리터는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말합니다.

대표적인 인터프리터 언어로는 python, javascript, sql 등을 예로 들 수 있습니다.

 

특징으로는

  • 고급 언어로 작성된 원시코드 명령어들을 한번에 한 줄씩 읽어들여서 실행됩니다.
    ㄴ 실행속도는 컴파일러에 비해 느린 편입니다.
  • 초기 개발 단계에서 빠른 디버깅과 프로그램 수정이 용이하다는 점에서 종종 사용됩니다.
  • 에러가 존재하는 코드 전까지 문제없이 수행됩니다.
    ㄴ 컴파일 과정이 없어서 대부분의 에러는 런타임 환경에서 발생됩니다. 에러 검출 측면에서 느리게 발견되고 서비스 규모가 클 경우, 에러 해결이 쉽지 않을 가능성이 높습니다.

 

보충

자바에서는 JVM에서 지원하는 JIT 컴파일러를 사용합니다. (위 그림에서 확인가능)

 

인터프리터 효율을 높이기 위한 컴파일러로 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러가 반복되는 코드를 네이티브 코드로 바꿔줍니다. 그 다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용합니다.

 


[출처]