CS : 컴파일 타임이란, 런타임이란

Erica Gong·2022년 7월 20일

CS101

목록 보기
1/1
post-thumbnail

들어가며

컴파일 타임런타임을 모르는 개발자는 없을 것이다. 그렇다면 왜 이렇게 간단한 주제에 대해 포스팅을 하는가. 막상 자세하게 설명하려고 하면 전공 수업 때 들었던 기억이 가물가물하면서 정확한 용어가 떠오르지 않기 때문이다.

목적에 맞게, 간단하게 컴파일 과정을 살펴보면서, 컴파일 타임런타임이 어떻게 분리되는지 살펴보자. 이후 컴파일러 언어인터프리터 언어에 대해 간략히 알아보려 한다.

컴파일이란

컴퓨터는 0과 1을 통해서만 명령을 실행할 수 있지만 개발자가 프로그래밍에 사용하는 언어들은 0과 1로 이루어진 형태가 아니다. 그렇다면, 개발자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 바꾸어 주어야 한다. 이 과정이 바로 컴파일이다.

컴파일 (compile) : 개발자가 작성한 소스 코드를 프로세서가 이해할 수 있는 기계어로 번환하는 작업

컴파일 과정

위 사진은 전공 수업에서 흔히 볼 수 있는 C언어 컴파일 과정이다. 넓은 의미에서 보면 컴파일전처리 과정, 컴파일 과정, 어셈블리 과정, 링킹 과정의 총 4 단계로 진행된다. 하지만 우리는 흔히 위의 4단계를 통틀어 빌드한다고 지칭하고 빌드 과정컴파일링킹이 포함된다고 말한다.

각 과정에 대해 간략히 요약하면 아래와 같다. 내부 동작 원리까지 알고 싶다면 하단의 참고자료 링크를 따라가면 된다. 정리를 매우 잘 해두셨다.

  1. 전처리 과정(Pre-processing) : 전처리기(Preprocessor)를 통해 소스 파일(.c)을 전처리된 소스 코드 파일(.i)로 변환
  2. 컴파일 과정(Compilation) : 컴파일러(Compiler)를 통해 소스 코드 파일(.i)을 ``어셈블리어 파일(.s)로 변환
  3. 어셈블리 과정(Assembly) : 어셈블러(Assembler)를 통해 어셈블리어 파일(.s)오브젝트 파일(.o)로 변환
  4. 링킹 과정(Linking) : 링커(Linker)를 통해 오브젝트 파일(.o)들을 묶어 실행 파일로 변환

컴파일 타임과 런타임의 구분

컴파일 과정에서 소스 파일실행 파일로 만들어지는 전반적인 과정을 컴파일 타임으로 지칭한다. 만들어진 실행 파일이 실행되어 종료하기까지의 시간이 바로 런타임이다.

컴파일 타임(compile time) : 소스 파일실행 파일로 만들어 지기까지의 시간
런타임(runtime) : 실행 파일이 실행되어 종료되기 까지의 시간

컴파일러 언어와 인터프리터 언어

컴파일 여부에 따른 언어의 분류

컴파일러 언어인터프리터 언어는 해당 언어의 컴파일 수행 여부를 기준으로 구분된다. 컴파일 절차를 거치는 C, C++, C#, JAVA의 경우 컴파일러 언어이며 이와 달리 컴파일 없이 소스 코드를 한 줄씩 읽고 해석하여 바로 수행하는 언어인 Python, JavaScript, Ruby인터프리터 언어에 속한다. 컴파일러 언어인터프리터 언어는 아래와 같이 간단하게 정리할 수 있다.

컴파일러 언어와 인터프리터 언어란 무엇인가

컴파일러 언어 : 컴파일 단계실행 단계가 분리된 언어
인터프리터 언어 : 컴파일 없이 프로그램 ``소스 코드를 바로 실행하는 언어

컴파일러 언어 vs 인터프리터 언어 장단점 비교

컴파일러 언어는 앞서 살펴본 컴파일 과정을 거쳐 개발자가 작성한 소스 코드기계어로 변환한 실행 파일을 생성한다. 한 번 컴파일 한 이후에 실행 파일을 단순 동작시키는 것만으로 실행을 수행할 수 있다는 점에서 인터프리터 언어에 비해 코드 실행 속도가 빠르다. 다만, 코드 수정이 있을 때마다 다시 컴파일(re-compile) 해야하는 번거로움이 있다.

인터프리터 언어는 이와 달리 컴파일 없이 인터프리터소스 코드를 한 줄 한 줄 읽고 바이트 코드로 변환하여 바로 수행한다. 따라서 코드 수정 시 재컴파일의 번거로움이 없고 컴파일 자체에 시간이 소요되지 않는다는 장점이 있다. 반면 실행파일이 생성되지 않기 때문에 매 번 실행 시마다 코드를 해석하는 인터프리트 과정이 반복 수행되어 컴파일러 언어에 비해 수행 속도가 현저히 느리다.

참고 자료

컴파일에 대한 이해, bradbury
컴파일러 언어 vs 인터프리터 언어, congaweb

0개의 댓글