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

C++에서 cout << endl과 cout << "\n"의 차이점 완벽 정리

cout << endl vs cout << "\n", 무엇이 다를까?

C++에서 콘솔이나 파일에 출력할 때 cout << endlcout << "\n"은 겉보기에 같은 결과를 내지만, 내부 동작에는 중요한 차이가 있습니다. 상황에 따라서는 "\n"을 사용하고 endl은 피하는 것이 좋습니다.

std::endl을 피해야 하는 이유

std::endl은 현재 줄 뒤에 새 줄을 만드는 역할을 합니다. 몇 줄 되지 않는 간단한 입출력 작업에서는 문제가 되지 않지만, 대량의 입출력(I/O) 작업이 필요한 경우에는 성능 저하의 원인이 됩니다.

핵심은 endl이 단순히 커서를 다음 줄로 이동시키는 데 그치지 않고, 매번 출력 버퍼를 강제로 비우는(flush) 작업까지 수행한다는 점입니다.

버퍼 플러시는 개발자의 몫이 아닙니다

버퍼를 비우는 작업은 원래 프로그래머가 신경 쓸 부분이 아니라 운영체제가 담당하는 영역입니다. endl이 버퍼를 비울 때마다 운영체제에 플러시 요청을 보내게 되는데, 이 요청 자체가 상대적으로 비용이 큰 작업입니다. 게다가 몇 줄 출력할 때마다 일일이 버퍼를 비울 필요는 전혀 없습니다. I/O 스트림은 버퍼가 가득 차면 자동으로 버퍼를 비워주기 때문입니다.

실제 성능 차이는 얼마나 될까?

약 10만 줄의 텍스트를 파일에 기록하는 작업을 std::endl을 사용한 코드와 '\n'을 사용한 코드로 각각 실행해 소요 시간을 비교해 보면 그 차이를 쉽게 확인할 수 있습니다. 실험 결과, std::endl을 사용한 코드는 '\n'을 사용한 코드보다 거의 두 배 가까운 시간이 걸리는 것으로 나타났습니다.

결론

특별히 즉시 출력을 보장해야 하는 상황(예: 실시간 로그 확인)이 아니라면, 줄바꿈에는 '\n'을 사용하는 것이 성능 면에서 훨씬 유리합니다. 대량의 데이터를 다루는 프로그램일수록 이러한 작은 차이가 전체 실행 속도에 큰 영향을 미칠 수 있습니다.