프로그래밍 언어로 코드를 짜고 나서, 코드를 실행하기 전에 컴퓨터가 읽을 수 있는 언어인 기계어로 “미리” 번역을 함
코드를 실행할 때는 컴퓨터에게 번역본을 건내줌
빠른 실행 속도
: 컴파일된 기계어 코드는 컴퓨터가 직접 이해하기 때문에 실행 속도가 매우 빠름
효율적인 메모리 사용
: 컴파일 과정에서 불필요한 코드를 제거하여 메모리를 효율적으로 사용
독립적인 실행 파일
: 실행 파일은 별도의 프로그램 없이도 실행될 수 있으므로 배포에 용이
또한, 컴파일 과정에서 코드의 오류를 사전에 발견할 수 있음
대표적인 컴파일 언어: C, C++, C#, Objective-C 등
*혹은 Build과정 : 컴파일 + 링킹 과정
4단계
전처리기(Preprocessor)를 통해 소스 코드 파일(.c)을 전처리된 소스 코드(*.i)로 변환하는 과정
외부에 선언된 헤더 파일을 현재 소스코드에 포함 시킴.
헤더 파일은 컴파일에 사용되지 않고, 선언된 함수 원형은 후에 링킹 과정을 통해 실제 함수가정의 되어있는 오브젝트 파일과 결합함
ex) C소스 내에 include 하면 전처리기가 include한 자리에 헤더파일의 내용을 붙임
컴파일러를 통해 전처리된 소스 코드 파일(.i)을 어셈블리어 파일(.s)로 변환하는 과정
이 과정에서 언어문법 검사와 Static영역(Data, BSS영역)들의 메모리 할당을 수행함
어셈블러(Assembler)를 통해 어셈블리어 파일(.s)을 오브젝트 파일(.o)로 변환하는 과정
오브젝트 파일(*.o)
컴파일러나 어셈블러가 소스코드 파일을 컴파일 혹은 어셈블해서 생성되는 파일기계어로 구성되어있음
이러한 코드로 구성된 파일을 Object File(오브젝트 파일)이라고 함
재배치 가능한 오브젝트 파일(Relocatable Object File) : 링킹하기 전의 오브젝트 파일
오브젝트 파일은 독립적으로 실행할 수 없음
링커를 통해 오브젝트 파일(*.o)들을 묶어 실행파일로 만드는 과정
오브젝트 파일들과 라이브러리 파일들을 링크하여 하나의 실행 파일을 만듦
실행 가능한 오브젝트 파일(Executable Object File) : 링킹을 통해 만들어지는 오브젝트 파일
소스 코드를 한 줄씩 읽어서 해석하고 바로 실행함
- 컴파일 과정이 필요하지 않으며, 인터프리터라는 프로그램이 소스 코드를 해석하여 실행
대표적인 인터프리터 언어: Python, JavaScript, Ruby, PHP 등