링크 : http://hatchling13.blog.me/220070260115
가장 알기 쉽게 확 와닿는 차이점은 바로 속도입니다.
인터프리터 언어로 작성한 프로그램은 컴파일러 언어로 작성한 프로그램보다 실행 속도가 느립니다.
물론 현재는 기술력이 좋아진 탓에 일반적인 사용자가 느낄 정도록 차이가 나지는 않습니다만...
웬만해서는 컴파일러 언어로 작성한 프로그램의 실행 속도가 더 빠른 것이 사실입니다.
지금부터 그 이유를 알아보도록 하죠.
제가 가장 좋아라하는 C++을 예로 들어봅시다.
C++로 작성한 소스코드가 프로그램으로 만들어지는 데는 크게 나누어서 세 가지 과정을 거치게 됩니다.
소스 코드 입력, 컴파일, 링크.
우리가 컴파일 버튼을 누르면, 컴파일러는 입력받은 소스 코드를 기계어로 해석, 목적 파일로 저장하게 됩니다.
그러고 나면 보통 컴파일러에 포함되어있는 링커가 그 목적 파일을 함수 라이브러리와 연결시킵니다.
이 때, 운영체제가 프로그램을 실행시키기 위해 필요한 스타트업(Start up) 코드도 함께 삽입되죠.
이렇게 해서 .exe 파일, 즉 실행 파일(executive file)이 생기게 됩니다.
실제 프로그램과 소스 코드의 용량 차이는 여기서 나는 것이구요..
반면에 인터프리터 언어 기반의 프로그램은 다소 색다른 방식입니다.
인터프리터 언어로 쓴 소스코드는 컴파일을 하지 않아요.
인터프리터의 사전적인 의미는 '해석기'라는 뜻이죠?
입력받은 소스 코드를 '해석기'에다가 넣고 한 줄씩 해석해가며 실행하는 것.
그것이 인터프리터 언어입니다.
이번에는 이 둘의 장단점을 파헤쳐보도록 하죠.
일단 컴파일 언어의 장점?
가장 큰 것으로 속도를 꼽을 수 있겠군요.
컴파일러 언어로 작성된 코드는 컴파일 시 "전체 소스 코드"가 기계어로 번역됩니다.
따라서 이미 번역되어 있는 것을 '실행만 하면 된다'는 거죠.
당연히 빠를 수밖에 없습니다.
인터프리터 언어는 어떤가요?
일단 인터프리터에 올리는 시간도 걸리고... 코드를 한 줄 한 줄 해석하며 실행하는 시간은 확실히 컴파일된 프로그램보다 오래 걸립니다.
하지만 인터프리터 언어에게는 반격거리가 있습니다.
컴파일러 언어는 소스 코드가 방대할 시, 컴파일에 걸리는 시간 역시 방대해집니다.
단적으로 이런 예도 있죠.
예전에는 컴퓨터의 성능이 현재의 그것과는 땅과 하늘 차이었습니다.
어떤 프로그램을 컴파일할 시 걸리는 시간이 무려 하루(!)에 육박하는 경우도 있었죠 ㅠㅠ
근데 프로그램의 마지막에 세미콜론 하나를 빼먹는다면?
잘 컴파일 되어 있겠지 하고 하룻밤 자고 일어나니 오류를 줄줄이 내뿜고 있는 컴파일러.
(앙대 으앙아아아아앙아ㅏㄺ)
하지만 인터프리터 언어는 컴파일이 필요없기에, 그런 걱정은 집어치우고 실행시간 오류(그 이름도 유명한 Run-time Error)를 잡을 생각만 하면 됩니다.
반면에 이런 특징 때문에 문법 오류를 일일히 발견해줘야 하는 귀찮음 또한 존재하죠.
컴파일러 언어는 틀린 문법을 컴파일 시간 오류(Compile-time Error)라는 이름으로 잡아주니까 일일히 찾아낼 필요가 없습니다.
마지막으로, 컴파일러 언어는 플랫폼에 매우매우 의존적입니다.
이게 무슨 말이냐, 윈도우에서는 돌아가는 프로그램이 OS X라거나 리눅스 계열에서는 돌아가지 않는 것을 생각하시면 됩니다.
(솔직히 저는 윈도우가 아직까지 살아있는 이유의 50% 정도가 이거라고 봅니다만... 겜덕들이 윈도우를 놓을 수 없는 이유)
그렇다면 해당 운영체제에서 다시 프로그램을 빌드(컴파일 + 링크)해주어야 할텐데, 그게 또 만만치 않다는 겁니다.
윈도우 프로그램을 소스 코드만 싹 복붙한 후 빌드 버튼을 눌러도 "안 된다"구요.
결국 소스 코드를 싹 다 갈아엎어야하고, 그 짓 하기 싫은 개발사들은 크로스플랫폼은 생각도 안 합니다 ㅠㅠ
반면에 인터프리터 언어로 개발한 프로그램은 해당 운영체제에서 돌아가는 인터프리터 프로그램이 있다면 조금만 손보면 그 운영체제에 이식이 가능합니다.(근데 이건 Python, Ruby 등 "일부" 인터프리터 언어들의 장점일 뿐입니다. BASIC이 맥에서 실행되든?(...))
글이 길어졌는데, 둘은 대충 이런 장단점들을 가지고 있습니다.
컴파일러 언어는 좀 더 빠르고, 인터프리터 언어는 수정이 간단하고 쉽죠.
하지만 둘 모두 수정이 간단치 않고 플랫폼 의존적이라는 단점, 느리다는 단점을 각각 지니고 있습니다.
어떤 방식을 선택할지는 여러분의 몫이 되겠죠.
[출처] 다시 쓰는 컴파일러 언어와 인터프리터 언어의 차이|작성자 해츨링
'Study > C / C++' 카테고리의 다른 글
[퍼온글] 메모리 누수 디버깅하기 (0) | 2015.02.08 |
---|---|
[퍼온글]TIP. 포인터(pointer)와 참조자(reference)의 차이점에 대해서 알고가자. (0) | 2015.02.06 |
[C++adv] STL 사용법과 주의 사항 (0) | 2015.02.06 |
API 1942 따라 만들기 - 중간 - (0) | 2014.09.22 |
API 비행기 출력 소스 (0) | 2014.09.12 |