이번 섹션에서는 C++의 Chrono 라이브러리가 무엇인지 자세히 살펴보겠습니다. Chrono 라이브러리는 C++11부터 표준에 포함된 라이브러리로, 날짜와 시간을 체계적으로 처리하는 데 사용됩니다.
타이머와 시계(clock)는 운영체제나 하드웨어 환경에 따라 서로 다르게 구현됩니다. 따라서 더 높은 시간 정밀도(precision)가 필요하다면 이 라이브러리를 활용하는 것이 좋습니다.
Chrono 라이브러리의 핵심은 지속 시간(duration)과 특정 시점(time point)을 분리하여 정밀도에 중립적인 개념을 제공한다는 점입니다. 덕분에 나노초부터 몇 시간 단위까지 다양한 시간 표현을 타입 안전하게 다룰 수 있습니다.
Duration 객체란?
duration 객체는 분, 두 시간, 십 분처럼 횟수(count)를 기반으로 시간 범위(time span)를 표현하는 데 사용됩니다. 예를 들어, 30초는 '1초' 단위 틱(tick) 30개로 구성된 duration으로 표현할 수 있습니다.
예제 코드
#include <iostream>
#include <chrono>
using namespace std;
int main () {
using namespace std::chrono;
// chrono::milliseconds는 std::chrono::duration의 인스턴스화입니다.
milliseconds mili(1000);
mili = mili * 60;
cout << "Duration : ";
cout << mili.count() << " milliseconds.\n";
cout << "Duration : ";
cout << (mili.count() * milliseconds::period::num / milliseconds::period::den);
cout << " seconds.\n";
}실행 결과
Duration : 60000 milliseconds. Duration : 60 seconds.
코드 설명
위 코드에서 milliseconds mili(1000)은 1,000밀리초, 즉 1초에 해당하는 duration 객체를 생성합니다. 여기에 60을 곱하면 60,000밀리초가 되고, count() 함수를 통해 내부 틱 값을 출력할 수 있습니다.
또한 period::num(분자)과 period::den(분모)을 이용하면 밀리초를 초 단위로 손쉽게 변환할 수 있습니다. 이처럼 Chrono 라이브러리는 단위 변환 과정에서 발생할 수 있는 오류를 컴파일 타임에 방지해 주므로, 시간 관련 로직을 작성할 때 매우 유용합니다.