
해당 포스트는 개인적으로 공부하고 이해한 부분을 글로 기록하고 해석하기 위한 목적으로 틀린 내용이 있을수도 있습니다. 틀린 부분에 대해서는 편하게 지적해 주시면 수정하겠습니다.
현대에 사용되는 대부분의 프로그래밍 언어는 자연어(사람들이 일상적으로 쓰는 언어, 출처:wikipedia) 또는 고급 언어이다. 하지만 컴퓨터가 이해할 수 있는 언어는 기계어 또는 저급 언어로 0과 1의 이진수로 나열되어있는 비트 패턴 형식이다.
여기서 고급 언어와 저급 언어로 구분하는 부분은 좋다/안좋다의 개념이 아니라 말 그대로 언어의 레벨을 말하는 것이다.
따라서 자연어의 프로그래밍 언어를 컴퓨터에게 바로 이해하라고 시킨다면 컴퓨터는 시도조차 하지 못할 것이다. 그래서 컴퓨터가 이해할 수 있도록 자연어를 기계어로 번역하는 작업을 컴파일이라고 한다. 그리고 그 작업을 수행하는데 프로그램으로 크게 컴파일러와 인터프리터가 있는데 이 둘을 간단하게 알아보자.
자연어를 기계어로 번역하는 작업사실 여기서 말하는 컴파일의 전체적인 과정은 빌드라고 한다.
빌드의 과정은 선행처리기가 소스 파일의 선행처리 지시어에 따라 선행처리가 이루어지고 그 다음 컴파일러에서 컴파일 작업을 수행한다. 컴파일 작업이 끝난 후 생성된 목적 파일들은 다시 링커 라이브러리를 사용하여 하나의 프로그램 실행 파일로 만든다(링크). 이 작업이 오류 없이 전부 끝나야 비로소 컴퓨터가 이해하고 실행할 수 있다.
- 빌드 순서
소스 파일 분석 -> 선행처리 -> 컴파일 -> 목적 파일 생성 -> 목적 파일 링킹 -> 실행 프로그램 생성
위 과정에서 알 수 있듯이 실행 파일이 생성되기까지 일단 과정이 많고, 또한 해당 과정을 더 자세히 살펴보면 더 복잡한 작업을 수행 한다.
따라서 컴파일은 개발을 완료하기까지 많은 시간을 필요로 한다.
하지만 그에 반해 이미 실행에 필요한 작업을 다 수행했기에 다른 작업 요소를 더 필요로 하지 않아 빠른 실행 환경을 제공한다.
대표적인 컴파일 언어로는 C, C++, Java 등이 있다.
인터프리터는 프로그램을 한 줄씩 번역하고 실행한다. 더 자세히 말하면 소스 코드를 한번에 한 줄씩 구문을 분석하여 번역하고 번역된 작업을 실행한다.
컴파일러와는 다르게 프로그램을 생성하기 위한 작업이 아니라 실행까지 하기 위한 작업을 한다.
- 실행 순서
한 줄씩 구문 분석 -> 번역 -> 실행
빌드 과정이 빠졌기 때문에 프로그램을 바로 실행함과 동시에 동작까지 확인할 수 있다는 건 개발 시간을 단축하는데 큰 장점이다.
대신 한 줄씩 번역하고 실행을 진행하여 실행 속도가 느리다는 단점이 있지만 최근 Python의 PyPy, JavaScript의 V8 엔진 등이 JIT 컴파일러를 활용하여 인터프리터 언어의 속도와 성능을 개선했다고 한다.
대표적인 인터프리터 언어로는 Python, JavaScript 등이 있다.
컴파일과 인터프리터에 대해서 정리해봤다. 컴파일 과정과 동작 방식 등 더 자세한 내용을 기록하고 싶었지만 해당 글은 단순히 컴파일과 인터프리터에 대한 적당한 기록이 목적이라 짧게 정리하고 더 자세한 내용은 컴파일/컴파일러, 인터프리터를 따로 분리하여 작성하고자 한다.
https://modulabs.co.kr/blog/interpreter-and-compiler/
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=138287372&start=pgooglemc