티스토리 뷰

728x90
반응형

endl과 '\n'의 차이

표준출력을 하다보면 << std::endl과 << "\n" 을 사용하는데 둘 다 출력이 끝나면 한 줄이 넘어가는 기능은 똑같다.

하지만 깊숙히 들어가보면 작동하는 원리는 완전 다르다.

 

std::endl은 코드가 끝나면 바로 버퍼를 지워준다.

\n을 사용하는 경우 프로그램이 끝나면 버퍼를 지워준다.

 

그렇다면 버퍼란 무엇일까?

 

버퍼란?

  • 우리가 입력을 받거나 출력을 할 때 한꺼번에 모아서 입력을 받거나 모아서 출력을 하는게 효율이 좋아서 사용한다.
  • 버퍼의 대표적인 사례가 동영상을 전송할 때 버퍼링이 일어나는 것등. 전반적으로 다양한 경우에 많이 사용된다.
  • 버퍼가 있는 방식은 입력 할 때 마다 한 글자 씩 버퍼로 이동한다.
    • 입출력 작업은 매우 느린데 버퍼를 사용하면 효율적으로 작업할 수 있다.
    • 하나하나 옮기면 느리지만 버퍼로 모아서 한 번에 옮기면 속도가 빠르다.
    • 버퍼를 보내는 방법은 1.버퍼가 다 찼을 때, 2. 특정 조건(예를 들어\n)가 있다.
    • 기본적으로 버퍼의 크기는 512byte, 4096byte 정도이다.(사용자가 입력할 때 많은 양을 입력하지 않을 것이다.)
  • window에서는 버퍼를 사용하지 않는 입력 함수를 제공한다.(conio.h 헤더) (unix, 리눅스 시스템에서는 사용법이 까다롭다.)

 

즉, std::endl은 명령이 끝나면 버퍼를 지워주고 \n은 버퍼를 지워주지 않는다.

간단한 코드에서는 문제 없이 발생할 수 있겠지만 나중에 코드가 복잡해져 버퍼가 안 지워져 나중에 고생할 수도 있으니 명확히 하려면 std::endl을 쓰는게 좋은 것 같다.

 

 

참조

[C++] std::endl이 \n과 다른 점 - 출력버퍼 이해하기 - yechoi

따배씨(인프런 강의 - 8.1 입출력 버퍼)

 

 

728x90
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함