컴파일러, 인터프리터의 특징들

2014. 5. 18. 23:29 - 루하스

프로그래밍 언어 해석에 따른 종류

 프로그래밍은 언어 해석으로 크게 2가지로 나눈다면 컴파일러 방식의 언어와 인터프리터 방식의 언어로 분류할 수 있다. 


이 두가지 방식은 서로간의 장단점이 존재하기 때문에 어느것이 더 좋다고 말할 수는 말할 수는 없다.



컴파일러 방식(compiler)

소스코드를 실행하기 전에 미리 기계어로 번역해서 수행한다. 


컴퓨터는 기계어로 수행하기 때문에 속도가 빠르며 0과1만으로 되어있어 보안이 높다.


하지만 소스코드를 조금만 수정을 가해도 컴파일(기계어로 번역)을 다시 해야하기 때문에 인터프리터에 비해 개발속도가 느리다.

ex)C, C++, Fortran, Ada 등




바이트코드 방식(Bytecode) : 기계어가 아닌 자기들만의 바이트코드형태로 컴파일하는 방식이다. 


하지만 그때문에 바이트코드를 가상머신이 해석할때마다 수행시간이 지연되어 수행속도가 순수 컴파일러보다 느리다.


또한 바이트코드를 해석하면 남의 코드를 엿볼수있는 역컴파일러도 존재하기 때문에 보안성이 낮아진다.


하지만 각 장비에 맞는 가상머신만 잘 만들어 놓으면 어떤 장비든지 같은 코드를 실행시킬수 있는 큰 장점이 존재한다.

ex)Java, C# 등



인터프리터 방식(interpreter)

소스코드를 그때그때마다 번역해서 수행하기 때문에 원문 그자체로 저장한다.


한 줄마다 읽고 해석하여 수행하기 때문에 속도가 느리지만 그때그때의 실행결과를 바로바로 알 수 있어 개발속도가 빠르다.


다만 코드를 열어보면 다 보인다.(그때문에 암호화 하는 방법도 존재한다.)

ex)Python, Ruby, JavaScript, Php 등




JIT(Just In Time) 컴파일 방식 : 프로그램을 실행할때 컴파일하는 방식이다.


바이트코드나 인터프리터의 경우에는 같은 코드를 매번 해석하고 있지만 JIT는 코드를 기계어로 변환하여 사용한다.


그 덕에 재사용할때 해석할 필요가 없어져 성능이 향상된다. 


개발할때에는  인터프리터나 바이트코드로 하여 개발속도가 빠르며 실행할때에는 기계어로 변환되기 때문에 

처음에 변환되는 지연속도를 제외하면 컴파일 방식에 속도가 근접한다.





다른 카테고리의 글 목록

프로그래밍 카테고리의 포스트를 톺아봅니다