std::chrono - 0. chrono가 왜 필요한가?
2022. 9. 21. 16:20ㆍC++
C++11 이전에 시간/날짜를 측정하기 위해서는 외부 라이브러리를 사용하거나 <ctime> 표준 라이브러리를 사용해야 했다. 하지만 <ctime> 라이브러리의 사용은 프로젝트에서 시간의 단위 변환이 많아질수록 사용이 까다롭고 버그가 발생할 확률이 높아졌는데, 그 이유는 다음과 같다.
- 단위 변환을 위해서 직접 특정 값을 곱하거나 나누어줘야 했으므로 프로젝트 내 특정 단위를 사용하다가 다른 단위를 사용하기로 설계를 수정한다면 모든 코드를 변경해야 한다.
#include <iostream>
#include <ctime>
void g(time_t milliseconds)
{
std::cout << milliseconds << std::endl;
}
void f(time_t minutes)
{
g(minutes * 60 * 1000); // milliseconds
}
int main()
{
time_t seconds{};
...
f(seconds / 60); // minutes
}
위 코드에서 함수 f의 매개변수를 다른 단위를 받도록 변경했다고 해보자. 그럼 이 함수를 호출하는 모든 곳과 이 함수 내부에서 호출하는 g 함수의 인자 값도 수정해야 한다.
- 시간의 타입(time_t)이 타입에 상관없이 숫자를 입력받는 타입(arithemtic type)이다. 즉, time_t 타입 변수가 가지고 있는 값이 어떤 단위인지 직관적이지 않으며, 실수로 다른 단위의 값을 넣어도 정상적으로 컴파일이 된다.
void f(time_t milliseconds);
int main()
{
time_t seconds{};
...
f(seconds / 60); // Mistake!
}
C++11부터는 이러한 문제를 해결하여 chrono 라는 표준 라이브러리를 도입하였다.
지금부터 이 라이브러리를 이루고 있는 구성 요소들에 대하여 하나씩 살펴보자.
'C++' 카테고리의 다른 글
std::chrono - 1. Duration (1) | 2022.09.22 |
---|---|
std::intializer_list는 어떻게 생성 및 파괴될까? (1) | 2022.09.16 |
std::string_view를 값으로 전달해야 하는 3가지 이유 (번역) (1) | 2022.09.13 |
Empty Base Optimization (1) | 2022.09.13 |
문자열 리터럴을 템플릿 인자로 전달하는 방법 (0) | 2022.04.02 |