
프로그래머가 작성한 소스코드를 컴퓨터가 이해할 수 있는 기계어(CPU가 읽을 수 있는 이진코드)로 번역하여
실행 가능한 파일로 만드는 과정.
C, C++, Go 언어 등
전처리(Preprocessing)
: 소스코드의 중심(main)이 실행되기 전에 사전준비를 하는 과정. 예를 들어 C언어에서 #으로 시작되는 구문들(#include, #define)
컴파일(Compile)
: 보통 컴파일러가 인간이 기계어를 이해할 수 있도록 고급언어와 기계어 사이에 중간 단계인 저수준 언어(어셈블리어)로 번역. 이 저수준 언어를 통해 하드웨어를 직접 조작하거나 특수 프로세스 명령어에 접근 등이 가능하다.
어셈블(Assemble)
: 어셈블러가 저수준 언어를 기계어로 번역. CPU가 이해할 수 있는 언어로 번역된 파일을 'Object File' 이라고 함. 여기서 Object 는 객체라는 뜻인데, 이 번역된 파일 하나하나가 실행하는 최종 파일의 일부분으로서의 객체이기 때문이다.
링킹(Linking)
: Object File 들과 필요한 라이브러리들을 연결시켜주고 하나의 실행가능한 파일(executable file)로 만들어 준다.
즉, 컴파일(전처리-컴파일-어셈블) + 링킹 = 빌드 라고 할 수 있다.
컴파일 언어의 장점
컴파일 언어의 단점
인터프리트 언어의 장점
컴파일과정 없이 바로 실행하기 때문에 수정, 디버깅에 유리해 개발속도가 빠르다.
각 플랫폼에 지원하는 인터프리터만 있다면 실행 가능하기 때문에 플랫폼에 독립적이다.
인터프리트 언어의 단점
빌드 되어있는 컴파일 언어 프로그램보다 실행시간이 느립니다.
코드를 열면 다 보이기 때문에 보안에 좋지는 않다.
고급 언어로 작성된 소스코드를 바이트 코드(bytecode)로 변환하는데 바이트 코드란 일종의 중간 언어라 생각하면 된다.
그리고 VM(Virtual Machine : 가상머신) 이라는 프로그램에 의해 바이트코드를 기계어로 바꿔준다.
컴파일 언어의 목적파일(기계어)은 하드웨어에 의해 처리되지만, 바이트 코드 파일(Java의 .class file)의 경우 소프트웨어(가상 머신)에 의해 처리된다. 즉, 바이트코드는 해당 가상머신 전용 기계어라고 볼 수 있다.
VM
즉, VM을 통해 '플랫폼에 독립적'인 장점을 갖고왔고, 초기 컴파일 단계를 통해 바이트코드로 기계어에 더 가까운 언어로 번역을 한 번 해놓았기 때문에 속도도 기존 인터프리터 언어에 비해 더 빠르다는 장점이 있다.
하이브리드 언어의 장점
하이브리드 언어의 단점