컴파일과 런타임의 차이
코딩공통
읽는데 4분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-02-10
조회수: 90
요약
컴파일 시점과 런타임 시점의 차이를 알아봅니다. C, Java, Python 공통 개념으로, 메모리 구조와 동적 메모리 할당을 이해하기 위한 필수 배경 지식입니다.
핵심 정리
| 구분 | 컴파일 시점 | 런타임 시점 |
|---|---|---|
| 시점 | 소스 코드 → 실행 파일 변환 시 | 프로그램 실행 중 |
| 결정되는 것 | 배열 크기, 지역 변수 크기, 타입 | malloc 크기, 사용자 입력 |
| 오류 | 문법 오류, 타입 오류 | 0으로 나누기, 널 포인터 접근 |
컴파일이란?
컴파일(Compile) 은 사람이 작성한 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 과정입니다.
text
코드 하이라이팅 중...
c
코드 하이라이팅 중...
위 코드를 컴파일하면 실행 가능한 파일이 생성됩니다.
bash
코드 하이라이팅 중...
런타임이란?
런타임(Runtime) 은 프로그램이 실제로 실행되는 시점을 의미합니다.
| 단계 | 설명 |
|---|---|
| 1. 작성 | 소스 코드 작성 (.c 파일) |
| 2. 컴파일 | 소스 코드 → 실행 파일 변환 |
| 3. 런타임 | 실행 파일을 실행하는 시점 |
런타임에는 사용자 입력을 받거나, 파일을 읽거나, 네트워크 통신을 하는 등 실행 중에만 알 수 있는 일들이 발생합니다.
c
코드 하이라이팅 중...
컴파일 시점에 결정되는 것
컴파일러가 코드를 분석할 때 미리 알 수 있는 것들입니다.
1. 배열 크기
c
코드 하이라이팅 중...
배열 크기는 컴파일 시점에 상수로 지정해야 합니다.
c
코드 하이라이팅 중...
2. 지역 변수 크기
c
코드 하이라이팅 중...
함수 호출 시 스택에 얼마만큼의 공간이 필요한지 컴파일러가 미리 계산합니다.
3. 자료형 크기
c
코드 하이라이팅 중...
sizeof 연산자의 결과값은 컴파일 시점에 확정됩니다.
런타임에 결정되는 것
프로그램 실행 중에만 알 수 있는 것들입니다.
1. malloc 크기
c
코드 하이라이팅 중...
동적 메모리 할당은 런타임에 크기를 결정할 수 있는 대표적인 방법입니다.
2. 사용자 입력
c
코드 하이라이팅 중...
3. 조건문 결과
c
코드 하이라이팅 중...
4. 파일 내용
c
코드 하이라이팅 중...
컴파일 에러 vs 런타임 에러
컴파일 에러
컴파일 에러는 컴파일 과정에서 발견되는 오류입니다. 프로그램이 아예 실행 파일로 만들어지지 않습니다.
c
코드 하이라이팅 중...
| 컴파일 에러 종류 | 예시 |
|---|---|
| 문법 오류 | 세미콜론 누락, 괄호 불일치 |
| 타입 불일치 | int에 char* 대입 |
| 선언되지 않은 변수 | prinft (오타) |
| 잘못된 연산 | 10 + "hello" |
런타임 에러
런타임 에러는 프로그램 실행 중에 발생하는 오류입니다. 컴파일은 성공했지만 실행 중에 문제가 생깁니다.
c
코드 하이라이팅 중...
| 런타임 에러 종류 | 예시 |
|---|---|
| 0으로 나누기 | a / 0 |
| 널 포인터 역참조 | *NULL |
| 배열 범위 초과 | arr[1000] (크기가 10인 배열) |
| 스택 오버플로우 | 무한 재귀 호출 |
| 메모리 부족 | 너무 큰 malloc |
정리: 컴파일 vs 런타임
| 구분 | 컴파일 시점 | 런타임 시점 |
|---|---|---|
| 언제 | 코드 → 실행 파일 변환 시 | 프로그램 실행 중 |
| 메모리 할당 | 스택 변수, 배열 크기 | malloc, 동적 배열 |
| 오류 발견 | 문법, 타입 오류 | 논리 오류, 예외 상황 |
| 오류 시 | 실행 파일 생성 안 됨 | 프로그램 비정상 종료 |
이 개념을 이해하면 메모리 구조에서 스택과 힙의 차이, 동적 메모리 할당에서 malloc이 필요한 이유를 더 잘 이해할 수 있습니다.