이명헌 경영 스쿨
[언어] 컴파일드 언어, 인터프리티드 언어란?
www.mackido.com 번역
이명헌 [ 1999-5-1 ]

기계어(machine code)라고 불리우는 가장 하위에 위치하는 언어는 단지 0과 1로만 이루어진 이진 패턴을 그룹지어놓은 비트로 이루어져 있다. 이렇게 그룹 지어진 것은 일정한 명령을 컴퓨터에 내리게 되는데, 이 명령을 instruction 이라고 한다. 이 instruction의 종류에는 반복적인 일련의 명령을 수행해주는 loop, 특별한 조건이 만족될 때만 어떤 일을 수행케 할때 사용하는 conditionals, 그리고 몇개의 연산함수 (덧셈,뺄셈,곱셈,나눗셈,참거짓을 판단하는 boolean연산등)이 있다. 사실상 컴퓨터 cpu가 수행하는 작업의 95%가 위에서 말한 명령들로 이루어져 있다. 컴퓨터는 단지 이런 작업을 정말로 , 정.말.로. 빨리 해준다는 점에서 대단한 것이다.. 우리가 맞닥뜨리게 되는 대부분의 문제점이란 것도 사실은 이들 단순한 instruction들을 조합하면 충분히 표현될 수 있다.

이러한 이진수로된 instruction들은 각 프로세서 췹마다 다르고, 인간이 읽고 이해하기에는 대단히 까다로운 형태를 띠고 있다. 그러므로 보다 더 인간이 친숙하게 익히고 활용할 수 있는 컴퓨터 언어를 개발해야 겠다는 요구가 당연히 있어왔고, 그런 일련의 노력 덕분에 C, C++, Pascal, Java 같은 우리귀에 익숙한 언어들이 만들어져 나온것이다.

컴파일드 언어 (Compiled Language)

컴파일드 언어는 기계어로 '컴파일' 되는 언어다. 컴파일이라는 과정은 일종의 번역작업으로 비유할 수 있겠다. 즉 어떤 영어문서를 스페인어 문서로 번역하는 것처럼 인간에게 친숙한 고급언어로 작성된 프로그램을 기계어로 번역하는 것이다. 일단 번역된 것은 다시 원본으로 되돌리는 것이 매우 곤란해진다. 컴파일된 코드는 매우 작은 크기에, 컴퓨터가 가장 이해하기 쉬운 형태로 변환되므로 빠르고, 최적화 된다. 컴파일된 코드는 그러나 각 컴퓨터 프로세서에 따라 독자적인 특징을 갖고 있다.(씨피유 의존적이란 말쌈) 그러므로 컴파일된 코드들은 여러종류의 프로세서들을 자유롭게 옮겨다니며 사용될 수 없는 것이다. (이를테면 powerpc와 pentium 사이). 컴파일 코드보단 덜하긴 하지만 소스코드(컴파일 이전의 프로그램) 또한 운영체계별로 다른 특징을 담고 있고 (예를들어 MacOS와 Windoze), 대개의 경우 특정 라이브러리 (library, support code)를 요구하게 된다.

: Source Code(컴파일 하기 이전의 프로그램)는 어느정도 까지는 여러 플랫폼에서 재사용 될 수 있다. 하지만 어쨌든 각 플랫폼 별로 따로 컴파일 해야 한다. 그리고 이런 컴파일을 가능케 하려면 손을 좀 대야하는 경우가 많다. (돈과 시간이 든다는 얘기당) 게다가 코드중 일부분만이 크로스플랫폼으로 이용될 수 있다는 점도 덧붙여 둔다. (프로그램 디자인 따라 다르긴 하지만 대개 20%에서 80% 정도가 크로스플랫폼적 성격을 갖는다) 씨나 씨뿔러스뿔러스, 파스칼(거의 대부분의 경우), 포트란등의 언어는 모두 컴파일언어다. 이들 언어로 씌여진 프로그램은 대체로 플랫폼 의존성이 강하고 특별한 프로세서용으로 만들어지는 경우가 대부분이다.

인터프리티드 언어 (Interpreted Language)

Interpreted Language는 컴파일 언어처럼 몽땅 기계어로 미리 변환되는 것이 아니고 실행중에 'interpreted' 된다. 컴퓨터는 프로그램 한줄한줄에 담긴 instruction을 읽어 본다음, 하나 하나 해석해가며 실행하게 된다. 물론 이들 각각의 instruction에 해당되는 루틴들은 다 'native' 다. 이해를 돕기 위해 예를 들자면, 사용자와 컴퓨터 사이에 통역관을 둔 형태라고 할 수 있겠다. 당신이 한마디를 하게 되면 통역관은 곧바로 컴퓨터가 이해할 수 있는 최적의 언어로 이를 옮겨준다. 이처럼 중간에 매개해주는 부분이 있다보니, 컴파일 언어보다 실행 속도가 떨어지는 것은 당연하다.

인터프리티드 언어는 프로그래머 입장에서 보면 상당한 잇점이 있다. 한줄 한줄 해석되는 언어이므로 자신의 프로그램을 수정하거나 보완한 경우, 전체를 완전히 새로 'recompile' 할 필요가 없이 즉각즉각 실행시켜보고 확인해 볼 수 있는 것이다. 리컴파일 할경우 몇분에서 길게는 몇시간이상 걸리는 것이 즉각 테스트 가능해지는 것이다. 또한 인터프리티드 언어는 특별한 플랫폼 의존성을 가질 필요가 없다. 실행중에 'interpreted' 되므로, 적절한 interpreter만 있다면 어떤 기종에서도 잘 실행될 수 있는 것이다. 이런 이유로 인터프리티드 언어는 보다더 크로스플랫폼적 성격을 갖게 된다.

10-20여년 전만 해도 컴퓨터는 오늘날보다 문자그대로 수백,수천배나 느린 성능을 갖고 있었다. 그러므로 편이성을 위해 성능을 희생할 수는 없는 상황이었다. 하지만 오늘날에는 엄청난 기술 발전 속도 덕분에 인터프리티드 언어가 서서히 세력을 확장해 가고 있는 추세다.

pCode (Bytecode)

컴퓨터가 'interpret' 해 놓은 구문은 일반적인 text와는 조금 다른 모습을 갖는다.즉 특별하게 축약된 형태로 변형되는데, 이건 기계어도 아니고 그렇다고 사용자가 읽고 이해할 수 있는 고급언어도 아닌 중간자적 형태를 갖게 된다. 이러한 코드를 기술적 용어로 P-Code라고 한다.이러한 pCode 테크닉은 1970년대 후반 UC 샌디에고에서 개발되었고, 썬 마이크로씨스템이 자바를 개발하면서 새롭게 확장 시킨 기술이다. 자바는 일종의 'byteCode' Compiler로, 일종의 인터프리터 역할을 하는 것이라고 하면 되겠다.

스크립팅 언어 (Scripting Languages)

어떤 언어들 중엔 (대개 인터프리티드 언어들 중엔) '프로그래밍 언어'라고 이름 붙이기에는 다소 덜 복잡하고 단순한 기능만을 수행해 주는 것들이 있다. 이런 언어들은 단순한 형태의 프로그래밍인 스크립팅을 위해 사용되는 경우가 많다. 만약 당신이 파워풀한 standalone application을 만들고 싶다면, 스크립팅 언어로는 부족하다. 당신에게 필요한 것은 프로그래밍 언어다. 하지만 이따금씩 파워유저나 프로그래머일지라도 애플리케이션에 몇가지 기능을 덧붙이기 위해 스크립팅 언어를 유효적절하게 사용할 수도 있다. 상당수의 프로그램들은 자체 스크립팅 언어를 갖추고 있다. 하이퍼카드와 Quicktime (QTi)-HyperScript, 애매쓰 오삐스와 비주얼베이직 또는 매크로미디어 디랙터와 링고, 그리고 애플사에서 파인더를 비롯한 다수의 애플리케이션의 기능향상을 위해 만들어 놓은 매우 광범위한 성격의 애플스크립트 같은 것들이 있다.

도스와 유닉스 (사실 이들은 Operating System과 사용자 사이에 놓여있는 일종의 애플리케이션이다) 또한 자체적인 스크립팅 언어를 갖추고 있다. 그외에도 수 백가지의 스크립팅 언어가 있다. 예를들면, Perl, Awk, 그리고 대부분의 데이터베이스에 갖추어진 스크립팅 언어들. 그리고 HTML을 위한 스크립팅 언어인 JavaScript(자바와는 아무 관계가 없는)도 있다. 한가지 잊지 말아야 할 점은 스크립팅 언어는 단지 '단순한' 기능만을 수행해주는 프로그래밍 언어로 특정 애플리케이션을 위한 몇가지 작업이나 OS-Shell에 명령어를 전달하는 작업을 수행키 위해 디자인된 언어라는 점이다. 스크립팅 언어는 '완전한' 프로그래밍을 위해 고안된 것은 아니다.

지금 계신 곳은: TECH > [언어] 컴파일드 언어, 인터프리티드 언어란?