컴파일러, 인터프리터

홍한솔·2021년 12월 26일
0

CS

목록 보기
2/3

컴파일러란?

컴파일러는 특정 프로그래밍 언어를 다른 프로그래밍 언어로 옮기는 번역 프로그램이다 .

보통 high-level 프로그래밍 언어를 low-level language인 기계어, 어셈블리어 등으로 바꾸는데에 사용된다.
하지만 정의에서도 알 수 있듯, python을 c언어로 변역하는 프로그램도 컴파일러라고 할 수 있다.

컴파일러는 파일 전체를 한꺼번에 번역하여 번역한 결과를 컴퓨터가 실행가능한 목적 프로그램으로 저장한다.

컴파일러는 문법적인 에러가 발생하면 컴파일 단계에서 발생하게 되는데 이를 컴파일 에러라고 한다.
컴파일 에러가 발생하면 실행자체가 불가능하다.
따라서 컴파일 에러와 관련된 에러를 초기에 발견할 수 있다.

대표적인 컴파일러 언어

  • C,C++

컴파일러의 장점

  • 컴파일이 완료된 실행 파일은 컴퓨터에서 빠르게 실행 -> 전체적인 실행 시간에서 효율적이다
  • 0과 1로 된 기계어로 번역되기 때문에 프로그램의 코드가 유출되지 않음
  • 컴파일 에러(문법적 에러) 와 관련된 에러를 초기에 발견할 수 있다.

컴파일러의 단점

  • 코드를 수정하면 컴파일을 다시 해야한다
  • 실행 파일 전체를 컴파일 해야하므로 용량이 크다. 따라서 수정사항이 빈번할 경우 문제가 발생한다.
  • 모든 프로그램을 한꺼번에 번역하기 때문에 컴파일링 시간이 비교적 느리다.
  • 목적프로그램 생성을 위한 메모리를 사용한다.
  • 특정 시스템에서 만들어진 실행 파일이 다른 시스템에서는 실행되지 않는 경우가 많다.

인터프리터란?

인터프리터는 컴파일러와 대조적으로 코드를 한 줄씩 해석하여 실행하는 프로그램이다.

컴파일러와 달리 목적파일을 생성하지 않기 때문에 메모리를 사용하지 않는다.

인터프리터는 실행시 마다 소스코드를 한 줄씩 기계어로 번역하기 때문에 실행속도는 컴파일러 보다 느리다.

하지만 컴파일러 보다 프로그램 수정이 간단하다는 점, 한 줄씩 실행되기 때문에 디버깅 과정이 간단하다는 점이 있다.

인터프리터는 컴파일러와 달리 에러가 존재하는 코드를 실행하기 전까지는 정상적으로 작동한다는 특징이 있다.
또한, 컴파일 에러가 존재하지 않기 떄문에 대부분의 에러는 런타임에서 발생할 가능성이 크다.

인터프리터 언어 종류

  • python
  • javascript
  • sql

인터프리터 장점

  • 메모리를 사용하지 않는다
  • 이식성이 뛰어나다 (시스템간)
  • 코드 수정에 용이하다 (전체코드를 다시 컴파일할 필요가 없다)

인터프리터 단점

  • 실행속도가 컴파일러에 비해 느리다
  • 바이트 코드로 해석되기 때문에 프로그램의 코드가 유출될 수 있다.

하이브리드

하이브리드 타입이란 컴파일러와 인터프리터의 장점을 섞은 프로그램이다.
대표적으로 Java와 C#이 하이브리드를 이용한 프로그래밍 언어이다.

하이브리드들은 VM 위에서 동작하여 어느 플랫폼 위에서도 동작할 수 있다 (컴파일러 언어 단점 보완).

Java를 예를 들면 다음과 같이 하이브리드 타입은 동작한다.
1. 먼저 컴파일러가 동작하여 소스코드를 바이트 코드로 변환한다.
2. vm 위에 존재하는 인터프리터가 해당 바이트 코드를 기계어로 변환하여 실행한다.

이 방식은 vm이 각 플랫폼을 지원한다면 어디서든 실행가능하다는 장점, 실행속도도 기존 인터프리터에 비해 빠르다는 장점이 있다 (컴파일 한걸 해석하기 떄문)
하지만, vm에 종속적이기 때문에 하드웨어를 직접 제어하는 작업은 불가능하다.

JIT 컴파일러

JIT 컴파일이란 프로그램을 실행하는 시점에서 필요한 부분을 즉석으로 컴파일 하는 방식을 의미한다.

최근 JVM, V8 엔진 에서 지원하는 컴파일링 방식이다.

profile
낭만있는 개발자

0개의 댓글