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

C++ cerr과 clog 스트림의 차이점 완벽 정리

C++ cerr과 clog 스트림의 차이점

C++에서 cerrclog는 모두 표준 에러 스트림(stderr)에 해당하는 객체입니다. 두 스트림은 오류 메시지를 출력하는 용도로 사용되지만, 버퍼링 방식에서 중요한 차이가 있습니다. 이해를 돕기 위해 표준 출력 스트림인 cout 객체에 대해서도 함께 살펴보겠습니다.

버퍼를 사용하지 않는 표준 에러 스트림 (cerr)

cerr는 오류 메시지를 출력하기 위한 표준 에러 스트림으로, ostream 클래스의 인스턴스입니다. cerr는 버퍼를 사용하지 않는(un-buffered) 스트림이기 때문에, 오류 메시지를 즉시 화면에 표시해야 할 때 사용됩니다. 별도의 버퍼 없이 곧바로 출력되므로 프로그램이 비정상적으로 종료되더라도 이미 출력된 오류 메시지는 사라지지 않습니다.

버퍼를 사용하는 표준 에러 스트림 (clog)

clog 역시 ostream 클래스의 인스턴스로 오류 메시지를 출력하는 데 사용됩니다. 하지만 cerr와 달리 clog는 버퍼링(buffered) 방식으로 동작합니다. 즉, 오류 메시지가 먼저 버퍼에 저장되고, 버퍼가 가득 차거나 명시적으로 플러시(flush)될 때까지 출력이 지연됩니다. 이러한 특성 덕분에 로깅(logging) 목적으로 자주 활용되며, 잦은 출력으로 인한 성능 저하를 줄일 수 있습니다.

참고: 표준 출력 스트림 (cout)

cout은 ostream 클래스의 인스턴스로, 일반적으로 모니터 화면인 표준 출력 장치에 데이터를 출력할 때 사용됩니다. 화면에 표시하고자 하는 데이터는 삽입 연산자(<<)를 통해 표준 출력 스트림(cout)에 전달됩니다.

정리: cerr vs clog 비교

두 스트림의 핵심적인 차이를 요약하면 다음과 같습니다.

  • cerr: 버퍼 없이 즉시 출력 → 긴급한 오류 메시지 전달에 적합
  • clog: 버퍼에 저장 후 출력 → 로그 기록 등 성능이 중요한 상황에 적합

따라서 즉각적인 오류 확인이 필요하다면 cerr를, 빈번한 로그 출력의 효율성이 중요하다면 clog를 사용하는 것이 좋습니다.