🚀 들어가며
게임을 만들다가 이런 경험을 해보셨을 겁니다.
컴퓨터가 빠르면 게임이 빨라지고 컴퓨터가 느리면 게임이 느려진다
같은 코드인데 실행 환경에 따라 게임 속도가 달라집니다.
이 문제를 해결하는 핵심 개념이 바로 deltaTime입니다.
🎯 문제 상황
position += speed;
이 코드는 매 프레임마다 위치를 증가시킵니다.
문제는 프레임 수입니다.
60 FPS → 1초에 60번 실행 120 FPS → 1초에 120번 실행
즉, 프레임이 많을수록 더 많이 이동합니다.
60 FPS → 60번 이동 120 FPS → 120번 이동
👉 결과: 컴퓨터 성능에 따라 게임 속도가 달라짐
🧠 해결 방법: deltaTime
deltaTime은 이전 프레임과 현재 프레임 사이의 시간입니다.
deltaTime = 현재 시간 - 이전 시간
이 값을 이용하면 “프레임 기준”이 아니라 “시간 기준”으로 계산할 수 있습니다.
position += speed * deltaTime;
🧠 직관적으로 이해하기
deltaTime은 “속도” 개념으로 이해하면 쉽습니다.
이동 거리 = 속도 × 시간
게임에서도 동일합니다.
👉 speed는 “1초 동안 이동하는 거리”
👉 deltaTime은 “이번 프레임에서 흐른 시간”
🔢 실제 숫자로 이해하기
지금까지 설명한 내용을 그림으로 정리해보면 다음과 같습니다.
핵심은 프레임 수가 달라져도 시간 기준(deltaTime)으로 계산하면 최종 이동 속도는 동일해진다는 점입니다.

위 그림처럼 FPS가 높아질수록 프레임당 deltaTime은 작아집니다.
반대로 FPS가 낮아질수록 deltaTime은 커집니다.
즉
- 빠른 컴퓨터 → 자주 업데이트하지만 조금씩 이동
- 느린 컴퓨터 → 적게 업데이트하지만 많이 이동
결과적으로 1초 기준 이동량은 동일하게 유지됩니다.
이것이 deltaTime의 핵심 목적입니다.
아래 예시를 통해 이해해봅시다.
speed = 10 (1초에 10 이동)
60 FPS:
deltaTime ≈ 0.016
10 * 0.016 = 0.16
120 FPS:
deltaTime ≈ 0.008
10 * 0.008 = 0.08
👉 프레임마다 이동량은 다르지만
👉 1초 기준 이동량은 동일합니다
🎮 deltaTime 계산하기
LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);
LARGE_INTEGER prevTime;
QueryPerformanceCounter(&prevTime);
while (true)
{
LARGE_INTEGER currentTime;
QueryPerformanceCounter(¤tTime);
float deltaTime =
static_cast(currentTime.QuadPart - prevTime.QuadPart)
/ static_cast(frequency.QuadPart);
prevTime = currentTime;
}
⚠️ 실무에서 중요한 문제
deltaTime이 너무 클 때
deltaTime = 0.5
position += speed * 0.5;
👉 캐릭터가 순간이동처럼 움직일 수 있습니다
그래서 보통 제한을 둡니다.
deltaTime = std::min(deltaTime, 0.033f);
🎯 고정 프레임 vs 가변 프레임
가변 프레임
매 프레임 deltaTime이 다름
고정 프레임
항상 일정한 값 사용
게임 엔진은 상황에 따라 두 방식을 조합합니다.
🧠 게임 루프와의 관계
게임 루프 ↓ deltaTime 계산 ↓ Tick (Update) ↓ Render
deltaTime은 게임 루프의 핵심입니다.
🎯 핵심 정리
- deltaTime은 프레임 간 시간 차이이다
- 프레임이 아닌 시간 기준으로 계산해야 한다
- position += speed * deltaTime 형태로 사용한다
- 게임 속도를 일정하게 유지하는 핵심 요소이다
이 구조를 이해하면
게임 엔진의 시간 처리 방식이 어떻게 동작하는지 보이기 시작합니다.
🎮 마무리
deltaTime은 단순한 변수 하나처럼 보이지만,
👉 게임 전체 속도를 결정하는 핵심 요소입니다.
🚀 한 단계 더 나아가고 싶다면
deltaTime은 게임 루프, 입력 시스템, 물리 처리와 모두 연결됩니다.
단순히 사용하는 것을 넘어서,
엔진이 어떻게 동작하는지 이해하는 데 초점을 맞춘 내용입니다.