컴파일러와 인터프리터

asda주asda·2022년 3월 1일
0

Python

목록 보기
31/31

프로그램 언어를 해석하고 실행시키는 대표적인 방법으로 Compile 과 Interpret 방식이 있다.

Compile 작업은 Compiler에 의해, Interpret 작업은 Interpreter에 의해 실행된다.
두 컨셉이 명확하게 다르기에 많은 프로그래밍 언어들은 둘 중 한가지 방식을 통해 언어를 실행하도록 설계된다.
(Java와 같이 두가지를 모두 채용하는 경우도 있다.)

컴파일
프로그래밍 언어를 Runtime 이전에 기계어로 해석하는 작업 방식이다.
이때 원래의 소스를 원시 코드, 바뀐 코드를 목적 코드(Object Code)라 한다.

런타임 이전에 Assembly 언어로 변환하기 때문에 구동 시간이 오래걸리지만, 구동된 이후는 하나의 패키지로 매우 빠르게 작동하게 된다.
구동시에 코드와 함께 시스템으로부터 메모리를 할당받으며 할당받은 메모리를 사용하게 된다.

런타임 이전에 이미 해석을 마치고 대게 컴파일 결과물이 바로 기계어로 전환되기 때문에 OS 및 빌드 환경에 종속적이다. 그러므로 OS 환경에 맞게 호환되는 라이브러리와 빌드환경을 구분해서 구축해줘야 한다.

Compile 언어의 대표격으로 C / C++ 와 같은 언어들을 들 수 있으며, Java 역시 Byte Code 로 바꾸기 위한 과정에서 컴파일을 수행한다.

  • 한번에 미리 번역한다.
  • 배포시 구문 오류가 존재할 수 없다.
  • 기계어를 직접 만들어 낸다.
  • 실행만 하면 되기에 수행성능이 좋다.
  • 별도의 실행환경이 존재하지 않는다. 메모리 관리도 직접 해야한다.

인터프릿(Interpret)

런타임 이전에 기계어로 프로그래밍 언어를 변환하는 컴파일 방식과 다르게, 런타임 이후에 Row 단위로 해석(Interpret) 하며 프로그램을 구동시키는 방식이다.

프로그래밍 언어를 기계어로 바로 바꾸지 않고 중간 단계를 거친 뒤, 런타임에 즉시 해석하기에 바로 완전한 패키지 형태로 Binary 파일을 뽑아낼 수 있는 Compile 방식에 비해 낮은 퍼포먼스를 보이게 된다.

런타임에 직접 코드를 구동시키는 특징이 있기에 실제 실행시간은 느리며, 대신 런타임에 실시간 Debugging 및 코드 수정이 가능하다.

또한 메모리를 별로 할당받아 수행되지 않으며, 필요할 때 할당하여 사용한다. 이와 관련되어 코드의 흐름 자체도 실제 필요할 때, 실제 수행되어야하는 시점에 덕타이핑(Duck Typing)이 가능한 측면이 있으나, 반대로 정적 분석이 되지 않은 Trade off를 갖고 있다.

대표적인 Interpreter 언어로는 Javascript 와 같은 스크립팅 언어들이 있다. 하지만, 스크립트 언어 뿐 아니라 컴파일 이후의 동작에서 Interpret 을 수행하는 언어들도 많이 존재한다.


인터프리터는 고레벨 언어(소스코드)를 바로 기계어로 변환하는 것이 아닌 중간 형태로 변환한 다음 실행한다. 컴파일러는 고레벨 언어를 바로 기계어로 변환한다.

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

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

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

  • 인터프리터를 쓰는 언어는 대표적으로 파이썬이 있으며, 컴파일 언어는 C, C++이 있다. 자바는 컴파일러인터프리터를 모두 사용한다.

-컴파일러인터프리터
개발 편의성코드를 수정하고 실행하려면 컴파일을 다시 해야한다.코드를 수정하고 즉시 실행할 수 있다.
실행 속도빠르다느리다
보안프로그램의 코드가 유출되지 않는다.프로그램의 코드가 유출될 수 있다.
파일 용량프로그램의 실행 파일 전체를 전송해야 하므로, 용량이 크다프로그램의 코드만 전송하면 실행이 되므로 용량이 작다.
프로그래밍 언어C, C++처럼 비교적 저수준에 가까운 언어Python, Ruby처럼 비교적 고수준에 가까운 언어

0개의 댓글

관련 채용 정보