Compiler와 Interpreter의 차이
*충남대학교 이성호교수님의 프로그래밍언어개론 강의를 참고하여 작성한 글입니다
컴퓨터는 사람이 고급언어로(C, C++, Java,,,,)작성한 코드를 바로 이해할 수 없습니다.
집에 살고있는 뽀삐한테 배고프니? 밥먹을래? 라고 말하면 대답할 수 없는 것과 마찬가지죠
그러므로, 상대가 이해할 수 있도록 입력을 주어야 합니다.
뽀삐한테도 해당 문장을 이해시키는 방법이 두가지가 있는 것처럼(강아지언어로 단어하나씩 설명하기, 사람언어를 문장통채로 이해하게 시키기) 컴퓨터에도 방법이 두가지가 있습니다.
이는 Compiler와 Interpreter를 사용하는 방법인데요.
Compiler는 번역기, Interpreter는 해석기 라고 빗대서 이해할 수 있습니다.
번역과 해석의 차이는 무엇일까요?
번역이란 상대방의 언어로 본인의 언어를 바꿔주는 것입니다.
뽀삐한테 밥먹을래?를 왈왈왈챱? 이라고 해주는 것이죠.
반면 해석은 상대의 언어로 바꿔서 상대가 언어로 이해하는게 아니라 내용을 이해해서 내용에 기반하여 상대한테 설명하는 것입니다.
뽀삐한테 공깃밥을 먹는시늉을하면서 사료를 보여주며 밥먹을래?가 밥을 의미하는 거구나~ 라고 이해하게하는것이지요.
다시 컴퓨터로 돌아옵시다
Compiler의 Compilation은
프로그래밍 언어로 작성된 프로그램을 다른 언어로 번역하는 행위입니다.
보통은 고급언어로 작성된 프로그램을 기계어로 번역하는 경우가 많습니다.
input이 고급언어로 이루어진 프로그램이고, output이 번역된 프로그램인거지요.
Compilation의 장점은
번역을 하면서 프로그램에 대한 안정성 검증 과정을 수행하고, 프로그램의 최적화를 진행할 수 있다는 점입니다.
프로그램이 가지는 의미만 변형하지 않는다면, 번역을 수행하며 불필요한 내용은 제거하고 간단하게 줄이고 문제가 되는 부분은 원작자한테 경고좀 날리고 할 수 있는거죠.
하지만, 이런 장점들은 무료로 진행되는것이 아니기에, 컴파일과정에서 많은 시간과 비용이 소요되는 단점이 있습니다.
Interpreter의 Interpretation은
프로그래밍 언어로 작성된 프로그램을 해석하여 실행하는 행위입니다.
컴파일러와 다르게 번역없이 언어를 바로 해석합니다.
바로 실행할 때 최적화를 진행하지 않고, 프로그램이 가지는 의미를 그대로 수행합니다.
하지만 바로 실행하기에 문제가 되는 부분을 검증하는 절차가 없어, 결함 탐지 및 수정의 어려움이 있습니다.
이렇게 compiler와 interpreter의 차이에 대해서 알아봤습니다.
다음은 compiled language와 interpreted language의 차이를 알아보겠습니다.
Compiled Language vs Interpreted Language
compiled language는 주로 static-typed language입니다.
정적타입언어는 컴파일 시점에 모든 변수와 표현식의 타입이 결정됩니다.
타입이 결정되므로, 잘못된 타입끼리 연산을 하는 경우 오류를 발생시킬 수 있죠.
이처럼 실행전 컴파일단계에서 검사를 하기에 안정적인 프로그래밍이 가능합니다.
interpreted language는 주로 dynamic-typed language입니다.
동적타입언어는 타입이 실행전에 결정되지 않고, 실행중에 타입이 변화합니다.
고로 같은 변수에 다른 타입들의 값을 저장할 수 있고, 같은 표현식이 다른 타입에 대해서 여러 다른 동작을 수행할 수 있는 등 높은 자유도를 제공합니다.
이렇게 간단하게 동적-정적타입언어의 차이와
컴파일러와 인터프리터의 차이에 대해서 알아봤습니다
안녕~~~