목차
컴파일(Compile)이란?
컴퓨터가 이해하는 언어는 0과 1로만 이루어져있다는 말 들어보셨나요? 컴퓨터는 전기 신호(전자 회로의 열린 상태 1, 닫힌 상태 0)를 사용해서 정보를 처리하기 때문에 이진법을 사용하는 것이 가장 자연스러운 방식입니다. 또한 두가지의 숫자만으로 모든 수를 표현할 수 있기 때문에 고성능의 전자 회로로 매우 빠르고 효율적으로 정보를 처리할 수 있습니다.
하지만 우리가 컴퓨터에게 일을 시키기 위해 0과 1로만 대화를 해야한다면 너무나 비효율적이겠죠. print("hello world")
와 같은 사람이 쉽게 받아들일 수 있는 코드를 작성했을 때, 이러한 프로그래밍 언어를 컴퓨터가 이해하려면 이진수로 변환해야 합니다. 이러한 과정을 컴파일이라고 합니다.
고수준 언어(high-level programming language)
위와 같은 예시에서 사람이 이해할 수 있는, 가독성이 높은 언어를 고수준 언어, 고급 프로그래밍 언어라고 말합니다. 우리가 흔히 알고 있는 C, Java, Python 등은 모두 고수준 언어에 속합니다. 고수준 언어는 컴파일 언어와 인터프리터 언어로 나눠볼 수 있습니다.
컴파일 언어(Compiled language)
컴파일 언어는 소스 코드를 실행하기 전 컴파일러를 통해 소스 코드가 컴퓨터가 이해할 수 있는 기계어로 변환하여 실행되는 언어입니다. 개발자는 프로그래밍을 마친 후 코드 전체를 컴파일하여 실행 파일을 생성한 이후에 실행할 수 있습니다. 코드에 오류가 있는 경우 컴파일 과정에서 알 수 있기 때문에 실행을 하기 이전에 오류를 파악할 수 있습니다. C나 Java 등이 컴파일 언어에 속합니다.
인터프리터 언어(Interpreted language)
인터프리터 언어는 코드를 실행을 하는 순간 인터프리터가 코드를 한 줄씩 기계어로 변환하여 실행하는 언어입니다. 인터프리터를 거쳐서 실행되기 때문에 컴파일 언어에 비해 속도가 조금 느린 특징이 있습니다. 또한 실행하는 순간에만 오류를 알 수 있으므로 오류를 미리 파악할 수 없습니다. 반면 실행 파일을 만드는 컴파일 과정 없이 빠르게 코드를 돌려볼 수 있기 때문에 빠르고 유연한 개발이 가능합니다. Python과 모던 자바스크립트 이전의 자바스크립트는 인터프리터 언어에 속합니다.
저수준 언어(low-level programming language)
저수준 언어는 고수준 언어와 달리 컴퓨터가 이해하기 쉽게 작성된 언어를 의미합니다. 저수준 언어는 저급 프로그래밍 언어라고도 합니다. ‘고급’과 ‘저급’의 의미 때문에 좋고 나쁜 언어라고 오해할 수 있지만 인간이 쉽게 이해할 수 있는지를 의미하는 추상화(abstraction)의 정도가 높은지, 낮은지에 따른 분류라고 생각하면 됩니다. 저수준 언어는 컴퓨터가 바로 이해할 수 있는 만큼 실행 속도가 빠르지만 인간이 익히기는 매우 어려워 특별한 경우가 아니면 사용할 일이 없을 것입니다. 저수준 언어는 기계어와 어셈블리어로 나눠볼 수 있습니다.
기계어
기계어는 0과 1로 이루어져 특별한 변환 과정없이 컴퓨터가 바로 처리할 수 있는 유일한 언어입니다.
어셈블리어
어셈블리어는 기계어와 1:1 대응이 되는 언어입니다. 저수준 언어라고 분류되지만 기계어를 인간이 사용할 수 있도록 추상화 된 수준의 언어입니다. 어셈블리어를 통해 컴퓨터에 속해있는 메모리, I/O장치 등을 제어할 수 있으므로 우리가 흔히 사용하는 전자제품에 포함된 컴퓨터 시스템을 의미하는 ‘임베디드 개발자’는 이러한 어셈블리어를 익혀 제품을 개발하게 됩니다.