두근두근이야기
컴파일러와 인터프리터 특징 및 장단점 본문
컴파일러와 인터프리터는 모두 고급언어(java, c언어등)를 pc가 읽을 수 있는 언어로 변환하는 툴이다.
이 둘의 차이를 보면..
인터프리터: 고급언어로 작성된 원시코드 명령문들을 한번에 한 줄씩 읽어 들여서 실행하게 하는 것.
컴파일러란: 특정 프로그램 언어로 작성된 문장을 처리하여 기계어 또는 컴퓨터가 사용 할 수 있는 코드로 변경시켜 주는 것.
컴파일러의 경우, 프로그램을 컴파일 하기 위해서는 모든 프로그램 소스를 가지고 한꺼번에 번역을 해서 목적코드를 제작한다. 반면에 인터프리터의 경우 필요한 부분을 행단위 구문으로 번역을 하여 바로 실행시킨다.
이와 같은 특징 때문에 컴파일러의 경우 한꺼번에 모든 부분을 번역해야 하기에 번역속도가 느린편이라 할 수 있다. 반면에 인터프리터는 필요한 부분만 컴파일을 하기 때문에 하나하나를 컴파일 하는 속도는 빠르다고 할 수 있다. 대신에 프로그램을 실행하면서 컴파일을 동시에 수행하기에 프로그램을 구동하는 시간은 오래 걸리는 편이다.
-------------------------------------------------------------------------------------
정리
- 컴파일러는 한꺼번에 컴파일을 하기 때문에 컴파일 시간은 오래걸리지만 목적프로그램을 실행할때는 컴파일을 하지 않아 속도가 월등히 빠르다.
- 인터프리터는 라인별로 컴파일을 하기 때문에 라인을 컴파일 하는 시간이 짧지만 프로그램을 실행하는 동안 컴파일 작업도 같이 하기 때문에 프로그램 자체의 속도는 느리다.
-------------------------------------------------------------------------------------
인터프리터를 쓰는 이유는??
-> 개발의 편의성에 있다.
예를 들어 프로그래머가 신나게 프로그래밍을 했다. 근데 컴파일을 하루만에 걸쳐서 했지만 변수를 잘못지정하여 오류가 났다. 그러면 수정 후 다시 하루걸려 컴파일을 해야하는가??
반면 인터프리터의 경우에는 컴파일을 따로 하지 않고 바로 실행을 한다. 마찬가지로 변수 하나의 이름을 착각해서 오류가 났다. 그렇다면 그냥 그 변수 이름을 수정한 다음에 다시 인터프리터로 돌리면된다. 바로 인터프리터에는 이러한 디버깅에 유리한 이점이 있다.
인터프리터에 유리한 이점을 하나가 더 있다. 바로 여러 운영체제에서 사용할 수 있다는 점이다. 윈도우같이 같은 계열이라도 엔진이 서로 다른 운영체제에서는 다시 컴파일을 해줘야 하는 경우가 있다. 물론 리눅스, 유닉스 같은 운영체제라면 더욱 그렇다.
반면 인터프리터의 경우에는 고급언어를 바로 인터프리터에 입력하여 실행하는 방식이기에 해당 운영체제의 인터프리터가 설치되어 있다고 한다면 따로 컴파일 과정 없이 사용이 가능하다.
즉, 인터프리터의 경우 OS마다 호환되는 인터프리터만 설치되어 있다면 해당 소스를 여기저기에서 사용하기에 유리하다.
----------------------------------------------------------------------------------------
인터프리터의 장점
- 전체를 컴파일하지 않기에 디버깅에 유리하다.
- OS별로 이식하기가 쉽다.
----------------------------------------------------------------------------------------
이러한 이점에도 JAVA가 나오기 이전까지는 인터프리터 방식이 그다지 선호 되지 못했다. 왜냐하면 인터프리터는 컴파일된 프로그램에 비해 실행속도가 늦었고, 소스코드 노출이 쉬워서 보안에 취약했기 때문이다.
하지만 지금에 와서는 컴퓨터의 하드웨어적인 성능이 많이 올라가서 인터프리터 방식이라고 해서 컴파일러에 의해 컴파일된 목적프로그램에 비해서 그다지 뒤쳐지지 않게 되었고, 또 컴파일러와 인터프리터의 장점을 혼합하여 일차적인 컴파일을 통해 원래의 소스 코드를 인터프리터가 읽고 사용하는 방식으로 확장되어 원본 소스코드가 공개되는 상황도 방지할 수 있게 되었다.
----------------------------------------------------------------------------------------
현재 컴파일러와 인터프리터의 장점을 혼합하여 사용하게 되었다.
----------------------------------------------------------------------------------------
끝.
출처: http://blog.bluesounds.net/97
'IT > IT' 카테고리의 다른 글
ARM PROCESSOR (0) | 2012.03.16 |
---|---|
intel x86, CISC (0) | 2012.03.15 |
Context Free Grammar (0) | 2012.03.15 |
멤버함수(member function)란? (0) | 2012.02.22 |
네트워크 용어 (0) | 2012.02.21 |