0. 인터프리터 언어란?

0. 인터프리터 언어란?
Copyright (c) Python Software Foundation. Licensed under the PSF License v2.

흔히들 Python은 인터프리터 언어라는 말을 들어 보았을 것이다.
이를 알아 보기 위해서는 먼저 컴퓨터의 소스 코드 실행 과정을 알아 보아야 한다. 

일반적으로 컴퓨터는 각 CPU별로 미리 정의된 명령어 집합에 따라 명령어를 해석하고 수행한다.
이 과정은 논리 회로에 의해 수행되며 그러한 이진 명령어를 보기 좋게 영어로 나타낸 것이 어셈블리어이다.
어셈블리어는 거의 기계어와  1대1 대응이 가능하기 때문에 대부분의 언어는 이러한 기계어를 목적 언어로 하여 컴파일한다.
*컴파일: 하나의 언어를 다른 언어로 유한 시간 안에, 각 코드에 대해 같은 설정에서는 유일한 결과를 출력하는 과정

컴파일 언어는 실행 전 컴파일을 거쳐 미리 실행 가능한 프로그램(exe 등) 또는 라이브러리(dll 등)으로 변환한 후 실행된다.
이와 반대로 인터프리터 언어는 실행 시 각 줄을 컴파일하여 실행한다.
덕분에 인터프리터 언어는 사전 컴파일 과정이 없어 빠른 디버깅이 가능하지만, 런타임에서 느린 성능을 보인다는 단점이 있다.

하지만 최근 개발되는 언어들은 이 중 하나로 분류하기 어렵다.
완전 인터프리터 언어로 개발하기에는 실행 성능이 부담되고 컴파일 언어는 빌드 시간 등이 부담되기 때문이다.
이러한 문제를 해결하기 위해 최근 개발되는 언어는 하이브리드 된 형태를 가지고 있다.대표적으로 JAVA는 JVM에서 실행하기 위한 바이트코드로 컴파일하며 python 또한 마찬가지이다.
실제로 파이썬에는 코드 타입이 존재하 compile이라는 함수가 별도로 존재하는 이유도 바이트 코드로 컴파일 하기 때문이다.