CPU가 해석할 수 있는 2진수의 모음이다.
기계어에 1:1로 매칭되는 문자열로 의미를 부여한 프로그래밍 언어이다.
어셈블리어의 컴파일러를 어셈블러(Assembler)라고 한다.
.Net 프로그래밍에선 실행 파일(EXE, DLL)을 어셈블리라고 하기도 한다.
소스코드를 그에 대응하는 기계어로 번역하는 작업을 뜻한다.
번역된 기계어는 obj 파일로 저장된다.
컴파일을 수행하는 프로그램을 컴파일러(Compiler)라고 한다.
자체 컴파일러를 제공하는 프로그래밍 언어가 많다.
일부 언어의 경우 컴파일 결과물이 기계어가 아닌 중간 언어이다. (ex. Java, C#)
컴파일된 obj 파일을 묶어 하나의 EXE 파일로 만드는 작업을 뜻한다.
링크를 수행하는 프로그램을 링커(Linker)라고 한다.
통상적으로 컴파일과 링크를 합쳐서 빌드라고 한다.
기계어에 가까울수록 저급 언어(Low Level Language)라고 하며 반대의 경우 고급 언어(High Level Language)라고 한다.
기계어와 어셈블리어가 저급언어에 해당하며 이외의 언어는 고급언어에 해당한다.
컴파일을 통해 소스코드를 중간 파일로 변환하고, 다시 링크를 통해 실행 파일을 출력하는 언어를 뜻한다.
중간 단계를 거치기 때문에 번역 속도가 느리고 추가 메모리 할당이 필요하지만, 기계어를 바로 실행하기 때문에 실행 속도가 빠르다.
대표 언어: Java, C#, C++
명시적인 컴파일 과정 없이 실행 시점에 소스코드를 한줄씩 해석하는 언어를 뜻한다.
해석과 실행을 동시에 진행하기 때문에 번역 속도가 빠르고 추가 메모리가 필요 없지만, 실행 시점에 번역 과정이 추가되기 때문에 실행 속도는 느리다.
대표 언어: JavaScript, Python
응용 소프트웨어를 제어하기 위해 사용하는 언어를 뜻한다.
컴파일러 언어와 인터프리터 언어는 작동 방식에 따른 분류임에 반해 스크립트 언어는 용도에 따른 분류이다.
예를 들어, JavaScript는 인터프리터 언어이자 웹브라우저의 스크립트 언어이다.
컴파일러가 출력한 결과물이 특정 CPU를 위한 기계어일 때 이 언어를 네이티브 언어(Native Language)라고 한다.
네이티브 언어로 만들어진 실행 파일은 CPU에 의해 곧바로 해석될 수 있기 때문에 속도가 빠르다는 장점이 있지만, 특정 CPU가 아니면 실행이 안된다는 단점이 있다.
중간 언어(Intermediate Language) 코드를 환경에 맞는 네이티브 언어로 변환해준다.
.Net Framework의 CLR(Common Language Runtime), Java의 JVM(Java Virtual Machine)이 대표적이다.
참고 자료
시작하세요! C# 10 프로그래밍 - 정성태