구리

[용어] 컴파일과 인터프리터의 차이 본문

기타

[용어] 컴파일과 인터프리터의 차이

guriguriguri 2023. 8. 8. 21:18

개발을 하다보면 컴파일, 인터프리터란 단어를 많이 쓰는데 무슨 뜻인지 정확한 개념을 알고 써야 한다고 생각되어 정리한 글입니다.

사전 지식

본문


코드 실행의 기본 원리

  • 프로그래밍 언어로 코드를 작성
  • 인터프리팅, 컴파일 등의 과정을 통해 0,1로 이뤄진 기계어로 변환
  • 0,1로 이뤄진 기계어 코드가 Memory 라는 곳에 저장됨
  • CPU는 메모리에 있는 0,1로 이뤄진 코드를 읽어 on/off 전기 신호로 실행시킴
  • 이때 on/off 전기 신호는 이진수 계산으로 각종 연산을 수행하며, 사실 메모리에 저장된 데이터도 전기신호임

 

언어의 종류

프로그래밍 코드, 기계어는 어떻게 다를까요?

1. 고급 언어

  • JavaScript나 Java처럼 사람이 이해하고 작성하기 쉬운 코드
  • 인터프리팅, 컴파일 등을 통해 최종적으로 기계어로 변환되어 CPU에서 실행됨
const num = 10;
const add = num + 20;
console.log(add);

2. 바이트코드(Bytecode)

  • 사람이 작성한 고급언어(JavaScript 등)를 가상머신이 이해할 수 있도록 변환한 코드
  • 가상머신은 바이트코드를 다양한 종류의 CPU에 맞게 기계어로 컴파일함
Add r0, [6] LdaSmi [1]

3. 기계어(Machine Code)

  • CPU가 바로 읽어서 실행할 수 있는 비트 단위의 이진 코드(0,1)
  • CPU 종류에 따라 코드를 해석하고 수행하는 방식이 다르며, 어셈블리어와 1대 1로 대응됨
10110000 01100001

참고로 어셈블리어는 기계어로 구성된 명령어를 사람이 알아보기 쉬운 니모닉 기호(mnemonics)를 정해 사람이 좀 더 쉽게 컴퓨터의 행동을 제어할 수 있도록 한 것으로 기계어보다 한 단계 위의 저급언어입니다.

mov al

 

 

코드 해석/변환 방식

고급언어로 작성된 코드는 컴파일러, 인터프리터를 통해 CPU가 실행할 수 있도록 변환됩니다.

이때 컴파일러, 인터프리터의 역할은 다음과 같습니다.

컴파일러(Compiler)

파일 전체를 읽은 뒤, 코드의 의미를 해석하고 파일 전체를 기계어로 변환합니다. (이 과정을 컴파일이라고 합니다)

인터프리터(Interpreter)

코드를 한줄한줄 읽어내려가며 한줄씩 중간 단계의 Bytecode로 변환됩니다. (이 과정을 인터프리팅이라고 합니다)
그리고 자바스크립트는 기본적으로 인터프리터 언어입니다.

컴파일러 언어와 인터프리터 언어의 차이점을 정리해보면 다음과 같습니다.

  컴파일러 언어 인터프리터 언어
코드 변환 방식 코드가 실행되기 전 컴파일 타임에 소스코드 전체를 한번에 기계어로 변환 후 실행 코드가 실행되는 런타임에 문 단위로 한 줄씩 Bytecode로 변환 후 실행
실행 파일 생성 O X
코드 실행 과정 컴파일 단계와 실행 단계가 분리
명시적인 컴파일 단계를 거친 후, 명시적으로 실행 파일을 실행
인터프리터 단계와 실행단계가 분리되지 않음
인터프리터는 한 줄씩 Bytecode로 변환 후 즉시 실행
반복 여부 실행 전 컴파일은 단 한번만 수행 코드가 실행될 때마다 인터프리트 과정이 반복 수행
실행 속도 컴파일과 실행 단계가 분리돼있어 코드 실행 속도가 빠름 인터프리트 단계와 실행 단계가 분리되지 않고 반복 수행되므로 실행 속도가 느림

참고 자료

https://developer.mozilla.org/ko/docs/Glossary/Compile

 

Compile - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN

컴파일(Compile)은 주어진 language로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스입니다. 컴파일러는이 작업을 실행하는 소프트웨어입니다. 때로는이 작업을 "

developer.mozilla.org

https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0

 

인터프리터 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 인터프리터(interpreter, 문화어: 해석기)는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. 원시 코드를 기계어로 번역하는

ko.wikipedia.org

https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96%B4

 

어셈블리어 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 어셈블리어(영어: assembly language) 또는 어셈블러 언어(assembler language)[1]는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다. 컴퓨터 구조에 따

ko.wikipedia.org

https://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8%EC%BD%94%EB%93%9C

 

바이트코드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 바이트코드(Bytecode, portable code, p-code)는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법이다. 하드웨어가 아닌 소프트웨어

ko.wikipedia.org