인터프리터
컴파일(Compile)은 인간이 이해할 수 있는 언어로 작성된 소스코드를 컴퓨터가 이해할 수 있는 기계어로 번역(변환)하는 작업을 의미한다고 했다. 이 과정에서 컴파일러는 소스 코드 전체를 목적 코드로 바꿔주고 컴퓨터에서 실행 가능하도록하는 원리였다. 그렇다면 인터프리터는 어떠한가?
인터프리터는 소스 코드를 한 줄씩 읽어들여서 즉시 실행한다.
- 소스 코드 한 줄 마다 번역과 실행이 동시에 이루어진다.
- 줄 단위로 진행되어 시분할 시스템에 유용하다.
- CPU 사용 시간의 낭비가 크다.
컴파일러는 사람이 하는 말을 처음부터 끝까지 들은 이후 작업 수행, 인터프리터는 소스 코드 한 줄 마다 번역함과 동시에 실행하는 작업을 수행한다. 쉽게 말해서, 인터프리터는 사람의 말을 동시통역하는 개념으로 이해하면 된다. 인터프리터는 줄 단위로 바로바로 프로그램이 실행 되기에 목적 프로그램이 따로 생성되지는 않는다.
컴파일러(Compiler) | 인터프리터(Interpreter) | |
---|---|---|
번역 단위 | 전체 | 한 줄 마다 |
실행 속도 | 빠름 | 느림 |
번역 속도 | 느림 | 빠름 |
목적 코드 | 생성 O | 생성 X |
예시 | C, C++, Java Compiler | Python, JavaScript, Java Interpreter |
위의 표를 보면 실행 속도와 번역 속도에 차이가 있음을 볼 수 있다. 인터프리터는 한 줄, 행마다 번역을 하기 때문에 번역 자체는 빠르지만, 프로그램 전체적으로 봤을 때, 번역 -> 실행, 번역 -> 실행의 과정을 반복하기 때문에 실행 속도는 컴파일러보다 느리게 되는 것이다.
따라서, 컴파일과 인터프리터는 각각 장단점이 있어서, 사용하는 상황과 용도에 따라서 선택하게 된다. 컴파일러는 실행 파일이 빠르고 안정적이지만, 번역하는데 시간이 걸리며, 수정이 어렵다. 인터프리터는 실행 파일이 빠르지 않고, 수정이 쉽지만, 오류를 찾는데 시간이 걸리고, 실행 중에 성능에 영향을 줄 수 있다.
번역 기법의 장단점
- 장점 : 실행 시간 효율성 제공 (한번 디코딩으로 반복 실행)
- 단점 : 번역된 프로그램이 큰 기억 장치 요구 (I/O routine 등)
인터프리터 기법의 장단점
- 장점 : 줄마다 실행하므로 큰 기억 장치 요구하지 않음, 사용자 적응성(flexibility) 제공
- 단점 : 실행 시간 효율성 떨어짐
컴파일러와 인터프리터는 다르지만, 확실하게 다르다고 경계선을 그을 수는 없다. 최근에는 컴파일러 방식, 인터프리터 방식을 섞어서 사용하기 때문이다.
자바에서의 인터프리터에 관한 이야기는 여기를 참고하자.