컴파일과 인터프리터의 차이, 장단점 그리고 고급 언어와 저급 언어
컴파일? 인터프리터?
프로그램을 개발할 때 우리들은 C, Java, Python, C++, C#, … 여러가지 프로그래밍 언어들을 사용해서 컴퓨터와 소통하고 프로그램을 개발한다. 컴퓨터는 인간의 언어를 배우지못하고 의사소통 방식 자체가 2진수 (0과 1)를 사용하기 때문에 0과 1 이외에는 이해하지 못한다. 그래서 우리들은 고급 언어(C, Python, …)를 통해 프로그래밍하고 컴파일러와 인터프리터를 통해 저급 언어로 변환해 컴퓨터와 의사소통을 한다.
0과 1로 이루어진 기계어
고급 언어와 저급 언어
고급 언어와 저급 언어를 구분짓는 차이는 컴퓨터가 아니라 ‘사람’에게 있다. 사람에게 편리할수록(접근하기 쉬울수록) 고급 언어, 사람보다는 컴퓨터가 이해하기 쉽고 가까운 언어일수록 저급 언어에 속한다.
왜 컴퓨터 언어인데 사람에게 편하고 쉬울수록 ‘고급’일까?
고급 언어
위에서 설명했듯이 ‘고급 언어’는 개발자가 이해하기 쉽고 가독성이 높은 언어이다. 저급 언어와는 다르게 특정 기계(컴퓨터)와 관계없이 독립적으로 프로그램을 만들 수 있다. 다만 실행을 위해서는 ‘컴파일러’나 ‘인터프리터’같은 번역하는 과정이 필요하다. 기계어로 번역하는 과정에서 시간이 소요되고 저급 언어보다 프로그램의 크기가 더 크다.
대표적으로 C, Java, Python 등이 있다.
저급 언어
‘저급 언어’는 컴퓨터가 이해하기 쉬운 이진법(0과 1)으로 이루어진 언어이다. 실제로 기계어로 된 코드를 보면 웃음밖에 안 나온다(옛날에는 기계어로 프로그램을 짰다고 한다…). 컴퓨터가 바로 이해할 수 있어서 프로그램의 속도가 빠르고 크기 또한 작다는 장점이 있지만 가독성과 생산성이 낮다는 단점이 있다.
대표적으로 기계어(비트 단위로 쓰인 컴퓨터 언어를 통틀어서 일컫음), 어셈블리어 등이 있다.
고급 언어 | 저급 언어 | |
---|---|---|
호환성 | 좋음 | 나쁨 |
가독성 | 좋음 | 나쁨 |
속도 | 느림 | 빠름 |
크기 | 큼 | 작음 |
컴파일과 인터프리터
컴파일과 인터프리터, 둘 다 기계어로 번역하기 위한 도구이다. 하지만 작동 방식에 차이가 있고 각자의 장단점이 존재한다.
컴파일
컴파일은 컴파일러Compiler라는 도구를 통해 컴파일을 진행하게 되는데, 프로그램 전체를 스캔하고 이를 모두 기계어로 번역한다. 전체를 스캔해야 하기 때문에 초기 스캔 시간이 오래 걸리지만 인터프리터보다는 빠르다(초기 스캔을 마치면 실행 파일을 만들고 다음에 실행할 때 그 파일을 실행하기 때문). 컴파일러는 원시 코드를 기계어로 번역하는 과정에서 오브젝트 코드Object Code를 만드는데 이 코드를 묶어서 하나의 실행 파일로 만드는 링킹Linking 작업을 해야한다. 이러한 과정 때문에 인터프리터보다 많은 메모리를 요구한다.
대표적인 언어로 C, C++, Java 등이 있다.
인터프리터
인터프리터Interpreter는 원시 코드(프로그래머가 작성한 소스 코드)를 기계어로 변환하는 과정없이 코드의 한 줄 한 줄을 해석해서 바로 명령어를 실행하는 언어를 말한다. R, Python, Ruby같은 언어들이 대표적이며 인터프리터가 따로 시간을 필요로 하지 않기 때문에 빌드 시간이 없지만 런타임 상황에서는 한 줄씩 읽어내리기 때문에 컴파일에 비해 속도가 느리다. 하지만 코드를 수정할 시 빌드 과정을 겪지 않고 바로 실행이 가능하다는 장점이 있다.
대표적인 언어로 Python, JavaScript 등이 있다.
댓글남기기