컴파일 compile
컴파일이란 어떤 언어의 코드를 다른 언어로 바꿔주는 과정이다. 예를 들어 C++ 언어 코드를 기계어로 바꿔주는 것이다. 소스코드, 라이브러리 등을 엮어서 결과물을 만들어 내는 것이다.
보통은 컴파일러를 통해 high-level 언어로 작성된 인간이 만든 프로그램 언어(소스코드)를 기계어(기계가 이해할 수 있는 이진수 언어)로 번역(컴파일)한다. 원래의 문서를 소스코드, 원시코드라고 하고 출력되는 문서를 목적코드라고 한다.
컴파일러 / 인터프리터
컴파일러, 인터프리터 모두 high-level 언어로 작성된 프로그래밍 언어를 기계어로 변환하는 것이다.
컴파일러와 인터프리터를 비교하자면 우선 interpreter의 inter는 사이(between)이라는 듯이다. 인터프리터는 항상 컴퓨터와 프로그램 사이에 있으면서 한줄씩 번역한다. 컴파일(compile)은 차곡차곡 쌓는다는 뜻으로 컴파일러는 전체 프로그램을 차곡차곡 쌓아서 전체를 한꺼번에 번역한다.
컴파일러는 플랫폼(하드웨어)에 종속적이지만, 인터프리터는 모든 플랫폼(하드웨어)에 종속되지 않는다.
컴파일러 (compiler)
고급 언어로 작성된 원시 프로그램을 입력으로 받아 기계어로 된 목적 프로그램을 출력하기 위해 사용되는 언어 번역 프로그램
컴파일러는 전체소스코드를 보고 명령어를 수집하고 재구성하는 반면 인터프리터는 소스코드의 각 행을 연속적으로 분석하며 실행한다.컴파일러는 프로그램 전체를 스캔해서 기계어로 번역한다. 전체를 스캔하기 때문에 컴파일러는 초기 스캔 시간이 오래 걸린다. 번역시간이 오래 걸리지만 한번 번역하면 실행파일을 생성하고, 다음에 실행할때 이전에 만들어 놓았던 실행파일을 실행하기 때문에 실행시간이 빠르다.
컴파일러는 번역과정에 목적코드를 생성하고, 목적코드를 묶어서 링킹 작업으로 하나의 실행파일로 만든다. 이 작업을 위해서 인터프리터보다 번역과정에서 더 많은 메모리를 사용한다.
컴파일러는 전체 코드를 검사한 뒤에 오류가 있을 경우에 오류메세지를 생성하기 때문에 실시간 수정이 어렵다.
인터프리터 (interpreter)
고급언어로 작성된 원시코드 명령어들을 한번에 한 줄씩 읽어들여서 실행하는 프로그램
컴파일러와는 반대로 인터프리터는 프로그램 실행시 한 번에 한 문장씩 번역하기 때문에 컴파일러보다 실행시간이 더 오래걸린다. 하지만 인터프리터는 목적코드 생성, 링킹 작업을 하지 않기 때문에 컴파일러보다 메모리 사용에 효율적이다. 인터프리터는 한문장씩 번역하기 때문에 프로그램을 실행하고 한문장씩 번역하면서 오류를 만나면 프로그램을 중지한다. 소스 코드를 한줄씩 실행면서 에러를 바로 알려주기 때문에 실시간 코드 수정이 가능하다. 오류 이후의 작성된 코드는 살펴보지 않게 되므로 프로그램을 실행해봐야 오류 발견이 가능하다.
컴파일러, 인터프리터 비교
컴파일러 compiler | 인터프리터 interpreter | |
번역 단위 | 전체 | 한 문장 단위 (row) |
번역 속도 | 전체를 한꺼번에 번역, 느리다. | 한줄 단위 번역, 빠르다. |
프로그램 실행속도 | 빠르다. | 느리다. |
실행파일 생성 | O | X |
메모리 할당 | O | X |
에러 발생 | 전체 코드를 변환 후 에러 보고 | 에러가 나면 프로그램 중지 |
언어 | C, C++, Java | Python, HTML, JavaScript, Ruby |
'Computer Science > CS' 카테고리의 다른 글
사용중인 port 검색 및 지우기 kill (0) | 2023.09.06 |
---|---|
TDD 테스트 주도 개발 / pytest-django (0) | 2023.01.16 |
Web, http, Server/Client, IP, DTO/VO (0) | 2022.09.02 |