고급 언어와 저급 언어
사람을 위한 언어
컴퓨터가 직접 이해하고 실행할 수 있는 언어
기계어 : 이진수(0과 1로 표현/가독성을 위해 16진수로도 표현한다)
어셈블리어 : 기계어를 읽기 편한 형태로 번역한 언어
고급 언어 ▶ 저급 언어로 변환하는 방식
컴파일 방식과 인터프리트 방식 두 가지가 있다.
컴파일 방식으로 작동하는 프로그래밍 언어를 컴파일 언어,
인터프리트 방식으로 작동하는 프로그래밍 언어를 인터프리터 언어라고 한다.
ex) c언어
컴파일(compile) : 소스 코드 전체가 저급언어로 변환되는 과정
컴파일러(compiler) : 컴파일을 수행해 주는 도구
목적 코드(object code) : 컴파일러를 통해 저급 언어로 변환된 코드
ex) python
인터프리터(interpreter) : 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해 주는 도구
컴파일 언어 vs 인터프리터 언어
일반적으로 컴파일 > 인터프리터 언어보다 빠르다. 인터프리터 언어는 소스 코드 마지막에 도달할 때까지 한 줄 한 줄씩 저급 언어로 해석하며 실행해야 하기 때문이다.
컴파일 언어와 인터프리터 언어는 상호 배타적인 개념이 아니다. 컴파일이 가능하다고 해서 인터프리트가 불가능하거나 인터프리터 언어라고 해서 컴파일이 불가능한 것은 아니다. Java처럼 저급 언어가 되는 과정에서 컴파일과 인터프리트를 동시에 수행하는 언어도 있다.
링커(linker) : 링킹을 담당하는 프로그램
여러 개의 object file들을 하나로 합쳐 실행 파일로 만드는 과정이다.
컴파일 과정을 거친 저급 언어의 파일을 목적 파일(object file)이라고 하는데, 목적 파일 자체만으로는 아무런 동작도 할 수 없다.
작성한 소스코드가 사용하는 다른 프로그램이나 라이브러리를 가져와 연결하는 링킹 작업을 거쳐 실행 파일이 된다.