포스트

[CS] 컴파일 타임 vs 런타임

프로그래밍 언어의 작동 순서

  1. 고수준 언어로 소스 코드 작성 (Java, Js…)
  2. 작성된 코드를 기계어로 변환 (컴파일 타임)
  3. 기계어를 컴퓨터가 실행 (런타임)

Compile time

우리가 작성한 고수준 언어(소스코드)는 컴퓨터가 이해하지 못한다. 즉, 컴퓨터가 이해할 수 있는 언어로 변환해주는 과정이 필수적이다. 이때 기계어로 변환하는 시점을 컴파일 타임이라고 한다.

컴파일 언어

컴파일 언어는 위에서 말한 기계어로 변환하는 과정이 필수적이다. 실행시에 기계어로 바로 하드웨어에 접근 가능하기 때문에 매우 빠르다.

  • Java
  • C
  • C++

Java의 경우

Java의 경우 컴파일을 할 시, 바이트코드가 생성된다. 자바는 JVM을 사용해서 동작하기 때문에, JVM이 이해할 수 있는 바이트 코드로 변환해준다.

.java 파일들을 .class 로 변환하는 과정이다. 컴파일 하고 바이트코드를 살펴보면 .class 파일들이 생성된 것을 볼 수 있다.

스크립트 언어 (인터프리터 언어)

스크립트 언어의 경우, 기계어로 변환하는 과정이 없다. 컴파일을 하지 않고, 소스 코드를 한 줄씩 번역하여 실행한다.

컴파일을 하는 시간이 들지 않지만, 기계어로 변환된 코드보다 한 줄씩 번역하는 과정이 반복 수행되어야 하기 때문에 실행속도가 느리다. (즉 타임검사, 해석 등이 동적으로 실행되어야 한다.)

  • Python
  • Javascript
  • Ruby

Runtime

소스코드에서 기계어로 컴파일이 완료됐다면, 해당 기계어를 가지고 프로그램을 실제로 실행시키는 시간을 Runtime이라고 한다. 컴퓨터 메모리에 로드되고, CPU로 처리한다.

Compile Error

소스코드를 기계어로 컴파일링 하는 과정에서 발생할 수 있는 여러 에러를 뜻한다. 주로 실행시키기 전에 예측 가능한 오류들이 있다. 이런 에러들은 실행 전에, IDE에서 미리 알려주는 경우도 있다. 즉, 컴파일 에러가 있다면 런타임으로 넘어갈 수 없다.

  • 문법 오류(Syntax Error): 세미콜론 생략
  • Type 체크: 잘못된 자료형
  • 파일 참조 오류

Runtime Error

컴파일 과정에서는 문제가 없었으나, 실행시에 예기치 않은 문제가 발생하는 것을 뜻한다. Java의 경우 JVM에서 해당 오류를 감지한다. 프로그래머가 try-catch문을 사용하거나, 직접 설계를 변경하여 해결할 수 있다.

  • null 참조 오류
  • 메모리 부족 오류
  • 0으로 나누는 오류
  • 스택 오버플로우


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.