프로그래밍을 하다 보면 "컴파일 타임(Compile Time)"과 "런타임(Run Time)"이라는 용어를 자주 접하게 됩니다. 특히 오류 메시지를 분석하거나, 성능을 최적화할 때 이 둘의 개념을 정확히 이해하는 것이 매우 중요합니다.
이 글에서는 컴파일 타임과 런타임의 차이를 쉽고 명확하게 설명해 드리겠습니다.
| 구분 | 컴파일 시간 (Compile Time) | 런타임 (Run Time) |
|---|---|---|
| 의미 | 코드를 기계어로 번역하는 시점 | 번역된 프로그램이 실제로 실행되는 시점 |
| 언제 발생? | 프로그램을 빌드(compile)할 때 | 사용자가 프로그램을 실행할 때 |
| 누가 처리? | 컴파일러 (g++, clang, MSVC 등) | CPU, 운영체제(OS) |
| 하는 일 | 문법 검사, 변수 타입 확인, 최적화 등 | 입력 처리, 계산, 출력 등 로직 실행 |
| 오류 종류 | 컴파일 오류 (예: 문법 오류, 타입 불일치) | 런타임 오류 (예: 0으로 나누기, 널 포인터 접근) |
🧩 컴파일 타임은 마치 레고 설명서를 해석하고 조립 순서를 계획하는 단계
🔧 런타임은 그 설명서에 따라 실제로 레고를 조립하는 단계
계획을 잘못 세우면 조립도 안 되겠죠? 마찬가지로, 컴파일 타임에 문제가 있으면 실행조차 되지 않습니다.
constexpr int a = 3 + 4; // 컴파일 타임에 계산됨
int main() {
int x;
std::cin >> x; // 런타임에 사용자 입력 받음
std::cout << x * a; // 런타임에 결과 출력
}
constexpr int a = 3 + 4; → 컴파일 타임에 계산됨std::cin >> x; → 런타임에 입력 받음x * a → x는 실행 중 결정되므로 이 곱셈도 런타임 연산int x = "hello"; // 문자열을 int에 저장하려 해서 컴파일 오류 발생
→ 타입이 맞지 않아서 컴파일러가 실행 전에 바로 잡아줍니다.
int x = 0;
int y = 10 / x; // 실행 중 0으로 나누기 때문에 런타임 오류 발생
→ 컴파일 시에는 몰랐지만, 실행 중 문제 발생.
이 두 개념을 명확히 구분하면 오류 디버깅이나 프로그램 흐름 이해에 큰 도움이 됩니다.