정의
컴퓨터는 사실 아주 단순한 계산기입니다.개발 언어( Java, JavaScript etc )는 사람이 보기 편한 문법입니다.
System.out.println("Hello, World!");
console.log("Hello, World!");
컴퓨터는 0과 1로 이루어진 이진법만을 이해할 수 있기 때문에 이 문법을 이해할 수 없습니다.
우리가 쓴 코드를 컴퓨터가 실행하려면 기계 언어로 번역해야 합니다
10110100 00000001
컴파일은 컴파일러를 통해 사람이 쓴 소스 코드를 컴퓨터가 이해할 수 있는 기계어 또는 중간 언어로 바꾸는 과정, 행위입니다.
특징
미리 번역한 뒤 실행합니다.프로그램 실행 전에, 전체 소스코드를 한 번에 분석하고, 기계어 또는 중간 언어로 변환합니다.
미리 번역을 하였기에 실행속도가 빠르고, 출력물로 실행파일 ( .exe, .class etc )을 생성합니다.
소스 코드에 오류가 있으면 컴파일 자체가 실패하여 실행파일이 만들어지지 않고, 프로그램 실행 자체가 되지 않습니다.
목적
안전하고 실행 가능한 상태로 만듭니다.예전에는 하드웨어 자원( CPU, 메모리, I/O etc )이 매우 제한적이였습니다.
실행이 느리면 사용자의 기다리는 시간이 길어지기 때문에 체감 성능이 매우 나빴습니다.
또한 운영체제, 네트워크 등은 제한시간 내에 반응하지 않으면 오작동 하기도 했습니다.
그래서 미리 전체 코드를 분석해서, 불필요한 계산은 없애고, 기계가 최대한 빨리 이해하고 실행할 수 있는 형태로 바꾸는 최적화 전략을 사용해 하드웨어 자원을 효율적으로 사용하는 컴파일 방식이 생겼습니다.