런타임(Runtime)이란?
프로그램이 실제로 실행되고 있는 시간
프로그램의 과정
코드 작성
↓
컴파일
↓
실행
↓
종료이 과정에서
컴파일 타임(Compile Time)
코드 작성 ~ 실행 파일 생성예시
int Num = "Hello";이건 컴파일할 때
타입이 안 맞음이라고 에러가 납니다.
즉 컴파일 타임 에러입니다.
런타임(Runtime)
프로그램 실행 후 ~ 종료 전예시
int Num = 10;
int Result = Num / 0;컴파일은 됩니다.
하지만 게임을 실행하면
0으로 나눔문제가 발생합니다.
이건 런타임 에러입니다.
언리얼에서 예시
컴파일 타임
AActor* Actor = nullptr
// 세미콜론 없음컴파일 자체가 안 됨
런타임
AActor* Actor = nullptr;
Actor->Destroy();컴파일은 성공
게임 실행 중 크래시 발생
리플렉션 설명에서 왜 런타임이 나오나?
예를 들어
UPROPERTY(EditAnywhere)
float MoveSpeed;언리얼은 게임이 실행 중일 때
이 변수 이름이 뭐지?
자료형이 뭐지?
블루프린트에 보여줄까?
저장할까?를 알아야 합니다.
일반 C++은 실행 후 이런 정보를 대부분 잃어버립니다.
그래서 언리얼은 리플렉션 시스템으로
클래스 정보
함수 정보
변수 정보를 런타임에도 가지고 있습니다.
컴파일 타임과 차이
| 구분 | 시점 | 예시 |
|---|---|---|
| 컴파일 타임 | 빌드 중 | 문법 오류 |
| 런타임 | 실행 중 | Null Pointer 접근 |
예를 들어
AActor* Actor = nullptr;
Actor->Destroy();는 컴파일은 성공하지만 실행 중 크래시가 발생하므로 런타임 오류입니다.
게임 개발에서 자주 듣는 말
런타임 생성
GetWorld()->SpawnActor();게임 실행 중 객체 생성
런타임 체크
if (Actor)
{
Actor->Destroy();
}실행 중 nullptr 여부 확인
런타임 정보
GetClass()
GetName()
Cast<>게임 실행 중 객체 정보를 얻는 것
이런 표현들이 전부 “게임이 실행되고 있는 동안” 을 의미합니다.