본문 바로가기
CS

컴파일러 vs 인터프리터

by KwonSoonBin 2023. 2. 11.

컴파일러(compiler)

  • 번역 프로그램 (소스코트, 원시코드 -> 바이트코드 , 목적코드로 변환)
  • High_Level 언어에서 Low_Level(ex: 어셈블리어) 언어로 번역(고급언어 -> 저급언어)
  • 플랫폼(하드웨어[OS, cpu])에 종속적
  • 정적 프로그램 : 변수 타입 변경 X
  • 실행 단계 전 컴파일 과정에서 오류 파악이 가능하다.

 

컴파일러(compile)는 특정 프로그래밍 언어로 쓰여있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램.

원시 코드에서 목적 코드로 옮기는 과정을 컴파일이라고 한다. 

 

예를 들어 C로 작성한 소스코드가 있다고 하면 컴파일러는 이를 어셈블리 언어와 같은 다른 언어로 번역해준다.

이때, C로 작성한 소스코드는 고급 프로그래밍 언어라고 하며, 어셈블리 언어는 저급 프로그래밍 언어라고 한다.

 

즉, 컴파일러는 고급 프로그래밍 언어를 저급 프로그래밍 언어로 바꿔주는 역할을 하며, 컴파일 되기 전 코드를 원시코드(source code)라고 하며, 컴파일된 이후의 코드를 목적코드(object code)라고 한다.

 

다시 정리하면 원시코드는 컴파일러의 인풋이 되는 것이고 목적코드는 컴파일러의 아웃풋이 되는 것이다.

정확히 말하면 목적코드(object code)는 머신 코드(machine code)의 실행가능한 버전이라고 생각할 수 있다.

 

 

컴파일러는 high-level 프로그래밍 언어(ex: C언어)를 low-level 언어(ex: 어셈블리어)로 바꾸어 실행 프로그램을 만들기 위해 사용된다. 원래의 문서를 소스코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 

 

 

장점

컴파일된 프로그램이 빠르다.

컴파일러는 한번 컴파일을 완료하면, 이후엔 번역을 하지 않고 바로 실행할 수 있다.(해석을 한 번만)

 

단점

플랫폼(하드웨어[OS,cpu])에 종속적

컴파일 과정 필요(JVM등 환경 구축 필요)

 

 

2. 인터프리터(interpreter)

  • 원시코드를 한 줄씩 읽어 바로 실행
  • High_Level 언어에서 중간 형태의 언어로 변형
  • 플랫폼으로부터 독립적으로 동작
  • 동적 프로그램 : 변수 타입 변경 가능
  • 실행이 되고 나서 오류 파악 가능

인터프리터(interpreter)는 프로그래밍 언어의 원시코드를 한 줄씩 읽어 곧바로 실행하는 컴퓨터 프로그램이다.

컴파일러는 high-level 언어를 직접 low-level 언어로 번역하지만, 인터프리터는 중간 형태로 번역하여 실행한다. 

한 줄 한 줄 읽어서 작동하면서 오류가 발생하면 이후 코드는 읽지 않는다. 이는 보안 관점에서 유리할 수 있다. 

 

 

장점

컴파일 단계가 없다. 컴파일 단계를 거치지 않기 때문에 컴파일 시간을 단축할 수 있다. 

컴파일러는 플랫폼(하드웨어)에 종속적이지만, 인터프리터는 모든 플랫폼(하드웨어)에 종속되지 않는다. 어떤 환경에서든지 프로그램을 실행할 수 있다

 

단점

컴파일러를 사용한 것보다 느리다는 단점이 있다.

인터프리터는 한번에 한 줄씩 원시코드의 내용을 읽어 실행하기 때문에 컴파일된 프로그램보다 실행이 느리다.

매번 실행할 때마다 새로 번역을 해야 한다.

 

 

 

 

 

정리

둘다 영어와 같은 인간의 언어로 작성한 코드를 컴퓨터가 이해할 수 있도록 변환시킨다는 점에서는 같다.

 

차이점으로는

인터프리터는 소스 코드를 한 줄씩(one statement) 해석, 컴파일러는 전체 프로그램 코드(entire program code)를 스캔하고 코드 전체를 통째로 목적코드로 한 번에 변환시킨다.

그리고 인터프리터는 소스 코드를 해석하는 데는 적은 시간이 걸리지만 실행 시간은 느리다. 반면 컴파일러는 소스코드를 해석하는데는 많은 시간이 걸리지만 실행 시간은 빠르다.

인터프리터 언어의 종류에는 루비, 파이썬 등이 있고 컴파일 언어의 종류에는 C, C++ 등이 있다.

 

*자바는 하이브리드 언어라고도 불리는데 컴파일 과정은 컴파일 언어의 특징을 가지지만 이후 실행 과정에서는 인터프리터 언어의 특징을 가지기 때문이다.

 

 

 

 

 

 

참고자료

https://losskatsu.github.io/os-kernel/compiler-interpreter/#%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-vs-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0-%EC%B0%A8%EC%9D%B4

https://jooona.tistory.com/157

'CS' 카테고리의 다른 글

3. JVM 기초 (용어 정리)  (0) 2023.02.11
2. JVM 기초 (구성)  (0) 2023.02.11
1. JVM 기초(JRE, JDK, SDK)  (0) 2023.02.10
8. 기술 외 공통 면접 질문  (0) 2023.01.30
7. 개발 언어(Java 위주)  (1) 2023.01.30

댓글