저급언어란 컴퓨터가 직접 이해하고 실행할 수 있는 프로그래밍 언어를 의미합니다.
고급언어로 작성된 소스코드가 실행될려면 반드시 저급언어로 변환되어야한다.
기계어는 0과 1의 명령어 비트로 이루어진 언어입니다. 2진수로 나열하다보면 너무 길어져서 16진수로 표현하기도 하지만 사람이 읽으면 그 의미를 이해하기 어렵고 오로지 컴퓨터만을 위해 만들어진 언어입니다.
어셈블리어는 0과 1로 이루어진 기계어를 읽기 편한 형대로 번역한 저급 언어입니다. 최소한의 명령으로 이루어진 언어로 이진수 패턴을 사용하는 기계어와 비슷해서 복잡한 프로그램을 만들기 쉽지 않습니다.
하지만 하드웨어를 사실상 제어하는 형태이기때문에 임베디드 개발, 게임 개발, 정보 보안 분야 등에서 많이 사용합니다.
고급언어란 사람이 이해하기 쉽게 작성된 프로그래밍 언어를 의미합니다. C
, C++
, JAVA
, python
등 대부분의 프로그래밍언어가 고급 언어에 속해 있습니다.
고급 언어로 작성한 소스코드는 저급 언어로 변환되어 실행되는데 크게 컴파일 방식과 인터프리터 방식 2가지로 변환됩니다.
컴파일러 언어는 컴파일 타임때 컴파일러에 의해 소스코드가 저급언어로 변환한 후, 실행파일을 통해 실행되는 고급 언어입니다.
컴파일러(Compiler)는 소스코드를 저급언어인 목적코드로 변환한 컴파일(Compile)과정을 통해 목적파일을 생성합니다. 하지만 목적파일로는 프로그램을 실행할 수 없습니다. 프로그램의 로직은 하나의 파일로 구성되어 있는 것이 아니라 외부 라이브러리나, 여러 파일로 분리어 있기 때문에 하나로 연결해주는 작업이 필요합니다.
이 때, 링커(Linker)는 목적코드로 이루어진 목적파일을 연결, 병합하는 링크(Link)과정을 통해서 최종 실행가능한 실행파일을 생성합니다.
최종적으로 빌드(Build) = 컴파일(Compile) + 링크(Link)
과정을 통해 소스코드를 실행파일을 만들어 실행(Run) 시켜줍니다.
컴파일 언어는 컴파일 단계와 실행 단계가 각각 분리되어 있으며, 컴파일은 한번만 수행합니다. 실행대는 컴파일 과정을 거치지 않고 실행파일만 실행하면 되므로 실행 속도가 빠릅니다. 하지만 규모가 큰 프로젝트 일 경우 컴파일 시간이 오래걸리거나 소스코드 내에 오류를 하나라도 발견하면 해당 소스코드는 컴파일을 실패할 수 있습니다.
컴파일러 언어의 종류
C, C++, C#, JAVA 등이 있다.
인터프리터 언어는 인터프리터에 의해 소스코드를 한 줄씩 실행되는 고급언어입니다.
인터프리터 언어는 컴파일 하는 과정이 없기 때문에 컴파일 하는 시간을 소요되지 않으나, 별도의 실행파일을 생성하지 않고 실행할 때마다 인터프리트 과정을 반복 수행해야되서 실행 속도가 느립니다. 하지만 소스코드를 한 줄씩 실행하기 때문에 소스코드 N번째 줄 문법 오류가 있더라도 N-1번째 줄까지는 올바르게 수행됩니다.
인터프리터 언어의 종류
Python, Javascript, Ruby 등이 있다.
컴파일러 언어 | 인터프리터 언어 |
---|---|
코드 실행 전, 컴파일 타임에 소스 코드 전체를 한번에 기계어로 변환 후 실행 | 코드가 실행 단계인 런타임에 코드 한 줄씩 중간 코드인 바이트코드로 변환 후 실행 |
실행 파일 생성 | 실행 파일 생성 X |
컴파일 단계와 실행 단계가 분리 | 인터프리트 단계와 실행 단계 분리 X인터프리터는 한 줄씩 바이트코드로 변환 후 즉시 실행 |
컴파일은 한번만 수행 | 코드 실행시마다 인터프리트 과정 반복 수행 |
컴파일과 실행단계가 분리되어 있어, 실행시에는 실행만 하면 되므로 코드 실행 속도 빠름 | 인터프리트 단계와 실행 단계가 분리되어 있지 않아 반복 수행하므로 실행 속도가 느림 |
하나의 프로그래밍 언어가 반드시 두 방식중 하나만으로 작동한다는 생각은 오개념입니다.
컴파일이 가능한 언어라고 해서 인터프리트가 불가능하거나, 인터프리트가 가능한 언어라고 해서 컴파일이 불가능하지 않습니다. 대표적으로 인터프리터 언어로 알려진 Python도 컴파일 하지 않는 것은 아니며, Java의 경우 저급 언어가 되는 과정에서 컴파일과 인터프리트를 동시에 수행합니다.