Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 크로노(chrono) 라이브러리 완벽 정리: 날짜와 시간 다루기

이번 글에서는 C++의 크로노(chrono) 라이브러리가 무엇인지, 그리고 어떻게 활용할 수 있는지 살펴보겠습니다. 크로노 라이브러리는 날짜와 시간을 처리하기 위한 표준 라이브러리로, C++11부터 정식으로 도입되었습니다.

타이머와 클록(clock)은 운영체제나 하드웨어 환경에 따라 해상도와 동작 방식이 서로 다릅니다. 따라서 더 높은 시간 정밀도(precision)가 필요하다면 이 라이브러리를 사용하는 것이 좋습니다.

크로노 라이브러리의 핵심 개념

크로노 라이브러리는 시간 길이(duration)시점(time point)을 분리함으로써, 특정 시스템에 종속되지 않는 정밀도 중립적(precision-neutral)인 시간 개념을 제공합니다.

duration(시간 길이)

duration 객체는 1분, 2시간, 10분처럼 횟수(count) 기반으로 시간 범위(time span)를 표현합니다. 예를 들어 '30초'는 '1초' 단위의 틱(tick) 30개로 구성된 duration으로 나타낼 수 있습니다.

time_point(시점)

time_point는 특정 클록의 에포크(epoch)를 기준으로 한 duration의 조합으로, 특정 시각을 나타냅니다. 대표적인 클록으로는 system_clock, steady_clock, high_resolution_clock이 있습니다.

예제 코드

#include <iostream>
#include <chrono>
using namespace std;

int main () {
    using namespace std::chrono;
    // chrono::milliseconds는 std::chrono::duration의 인스턴스화(instantiation)
    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.

코드 설명

위 예제에서는 1000밀리초(1초)를 값으로 갖는 milliseconds 객체를 생성한 뒤, 여기에 60을 곱해 60000밀리초(60초)로 만들었습니다. count() 멤버 함수는 내부 틱 개수를 반환하며, period::num과 period::den(각각 분자와 분모)을 이용하면 밀리초 값을 초 단위로 손쉽게 변환할 수 있습니다.

이처럼 크로노 라이브러리를 활용하면 단위 변환 오류 없이 안전하고 직관적으로 시간을 다룰 수 있으며, 코드의 이식성과 정밀도를 동시에 확보할 수 있습니다.