컴파일러, 인터프리터 둘 다 고레벨언어로 작성된 프로그래밍 언어를 저레벨언어(기계어)로 변환하는 것은 맞으나 그 과정에 있어서 차이를 보인다.
고레벨 언어(high-level programming language)
사람이 이해하기 쉽게 작성된 프로그래밍 언어로서, 저레벨언어보다 가독성이 높고 다루기 간단하다는 장점이 있다.
대신 기계어로 바꾸기 위해 컴파일러나 인터프리터가 필수적으로 요구된다. C 언어, 자바, 베이직 등 대부분의 프로그래밍 언어들은 고레벨 언어에 속한다. 추상화의 정도는 얼마나 프로그래밍 언어가 높은 수준인지를 정의한다.
저레벨 언어(low-level programming language)
컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어로, 일반적으로 기계어와 어셈블리어를 일컫는다. 실행속도가 매우 빠르지만 배우기가 어려우며 유지보수가 힘든 것이 단점이다.
Compiler | Interpreter | |
---|---|---|
소스코드를 다 적은 후 한번에 전체를 변환하는 형태 | 소스코드의 각 행마다 변환하는 형태 | |
고레벨 언어를 바로 기계어로 변환 | 고레벨 언어를 중간형태로 변환한 다음 기계어로 변환 | |
장점 | 인터프리터보다 속도가 빠르다. | 1. 각 행마다 실행하는 도중 에러가 보고되면 이후 작성된 코드를 살펴보지 않기 때문에 오류감지가 쉽다. 2. 인터프리터만 설치되어있으면 같은 프로그램을 다른 컴퓨터에서도 실행시킬 수 있다. |
단점 | 1. 한번에 모두 읽고 실행하기 때문에 처음에 컴파일 과정이 오래 걸릴 수 있고 메모리도 많이 차지한다. 2. 전체를 변환 후 에러를 보고하기 때문에 오류감지가 어렵다. 3. 한 컴퓨터에서 컴파일 해서 실행한 프로그램은 명령어 셋이 다른 컴퓨터에서 동작하지 않을 수 있다. 4. 일부를 수정한다면 전체를 컴파일해야한다. | 컴파일러보다 속도가 느리다. |
대표언어 | C, C++ | Python, R |
인터프리터가 한줄한줄 단위로 번역과 실행을 진행하기 때문에 쉽게 오류를 잡을 수 있어 개발자에게 더 유리하다고 볼 수 있지만 꼭 그렇지만은 않다. 퍼포먼스를 중요시해야하는 프로그램같은 경우에는 실행속도가 느린 인터프리터보다 컴파일러를 적용하는 것이 좋다. 하지만 일정부분이 오류가 나도 그 전까지는 작동이 되는 웹같은 경우에는 인터프리터를 사용하는 것이 컴파일러보다 손실을 줄일 수 있다 생각한다.
참고
https://techdifferences.com/difference-between-compiler-and-interpreter.html
https://m.blog.naver.com/ehcibear314/221228200531
https://imasoftwareengineer.tistory.com/43