기간과 시계
시간 간격 측정하기
기간과 시계은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
왜 <chrono>인가요
<chrono> 라이브러리는 C++에서 시간을 다루는 타입 안전한 방법을 제공합니다. 원시 정수 대신 타입이 강하게 지정된 기간과 시점을 사용하므로 컴파일러가 단위 오류를 찾아냅니다.
- 초와 밀리초를 더 이상 혼동하지 않습니다.
- 단위가 타입 시스템의 일부가 됩니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
seconds s{5};
std::cout << "Duration: " << s.count() << " seconds\n";
return 0;
}기간이란 무엇인가요
std::chrono::duration은 시간의 구간을 나타냅니다. 틱의 개수와 틱 주기를 설명하는 비율을 저장합니다. 미리 정의된 별칭으로 일반적인 단위를 사용할 수 있습니다.
hours,minutes,secondsmilliseconds,microseconds,nanoseconds
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
std::cout << ms.count() << " ms\n";
return 0;
}기간 리터럴
std::chrono_literals 네임스페이스를 사용하면 5s나 200ms 같은 접미사로 기간을 작성할 수 있어 코드가 일반적인 문장처럼 읽힙니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono_literals;
auto wait = 3s;
auto blink = 250ms;
std::cout << wait.count() << "s, " << blink.count() << "ms\n";
return 0;
}기간 변환
duration_cast는 단위 사이를 변환합니다. 더 세밀한 단위에서 더 큰 단위로 변환하면 값을 버리므로, 1500ms는 1s가 됩니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
seconds s = duration_cast<seconds>(ms);
std::cout << s.count() << " whole seconds\n";
return 0;
}기간의 산술 연산
기간은 +, -, *, / 연산을 지원합니다. 단위를 섞으면 더 세밀한 공통 단위로 자동 승격됩니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto total = minutes{2} + seconds{30};
std::cout << total.count() << " seconds total\n";
return 0;
}부동 소수점 기간
변환할 때 소수 값을 유지하려면 부동 소수점 표현을 사용할 수 있습니다. 이렇게 하면 정수 기간에서 발생하는 버림을 피할 수 있습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
milliseconds ms{1500};
duration<double> secs = ms;
std::cout << secs.count() << " seconds\n";
return 0;
}시계란 무엇인가요
시계는 현재 시각을 제공합니다. 표준 라이브러리는 세 가지 시계를 제공합니다.
system_clock— 실제 시각steady_clock— 절대 뒤로 가지 않으며 시간 측정에 적합한 시계high_resolution_clock— 사용 가능한 가장 세밀한 틱
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto now = steady_clock::now();
std::cout << "Got a time point: " << (now.time_since_epoch().count() > 0) << '\n';
return 0;
}system_clock
system_clock은 실제 달력 시간을 추적하며, 표시를 위해 time_t로 변환할 수 있습니다. 시스템 시계를 조정하면 시간이 갑자기 바뀔 수 있습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto tp = system_clock::now();
auto secs = duration_cast<seconds>(tp.time_since_epoch());
std::cout << "Seconds since epoch is positive: " << (secs.count() > 0) << '\n';
return 0;
}steady_clock
steady_clock은 단조 증가합니다. 일정한 속도로 앞으로만 진행합니다. 경과 시간을 측정할 때는 언제나 system_clock이 아닌 이 시계를 사용하세요.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto a = steady_clock::now();
auto b = steady_clock::now();
std::cout << "Monotonic: " << std::boolalpha << (b >= a) << '\n';
return 0;
}시계의 해상도
각 시계는 컴파일 시점의 비율로 period를 제공합니다. 시계가 안정적인지도 컴파일 시점에 확인할 수 있습니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
std::cout << "steady_clock is_steady: " << std::boolalpha << steady_clock::is_steady << '\n';
std::cout << "system_clock is_steady: " << system_clock::is_steady << '\n';
return 0;
}함께 사용하기
시계와 기간을 결합해 보세요. 두 시점을 읽고 선택한 단위의 기간으로 차이를 계산합니다.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 1000000; ++i) sum += i;
auto end = steady_clock::now();
auto us = duration_cast<microseconds>(end - start);
std::cout << "Loop took at least 0 us: " << (us.count() >= 0) << '\n';
return 0;
}빠른 확인
시간을 측정할 때 어떤 시계를 사용해야 하는지에 대한 이해도를 확인해 보세요.
복습
<chrono>는 다음을 제공합니다.
- 기간 —
5s같은 리터럴을 사용하는 타입 안전한 시간 구간 - 단위 변환을 위한
duration_cast(정수는 버림) - 시계 —
system_clock,steady_clock,high_resolution_clock - 구간을 측정할 때
steady_clock사용
다음에는 시간 지점으로 특정 시점을 표현합니다.
자주 묻는 질문
“기간과 시계” 강의는 무료인가요?
네 — “기간과 시계” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“기간과 시계”에서 뭘 배우나요?
시간 간격 측정하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C++ Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“기간과 시계” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.