wellcome_공부일기

C++ | 02.08 std::endl vs ‘\n’ 그리고 std::flush 본문

프로그래밍/C++

C++ | 02.08 std::endl vs ‘\n’ 그리고 std::flush

ma_heroine 2020. 5. 9. 23:57

<목차>

1. std::endl vs ‘\n’

2. std::endl의 특징

3. ‘\n’의 특징

4. std::flush란?

 

std::endl vs ‘\n’

일반적으로 콘솔로 텍스트를 출력할 때 std::endl보다 '\n' 문자를 사용하는게 선호됩니다.

그 이유는 std::endl 와 ‘\n’가 ' Flush '를 하느냐 안하느냐의 차이가 있습니다.

여기서  ' Flush ' 란 버퍼에 담긴 데이터가 모두 쏟아지는 것을 말합니다. 

 

std::endl의 특징

- std::endl을 사용하면, 커서를 다음 줄로 옮기고, 출력을 "Flush"하는 두 가지 작업을 하기 때문에, 약간 비효율적임

 (std::endl의 역할인 Flush는 화면에 결과물이 모두 그리고, 즉시 나타나는지 확실히 해야 하는 일을 함)

- 왜냐면 std::cout을 사용하여 콘솔에 텍스트를 쓸 때, std::cout은 텍스트를 보통 어떻게서든 출력하여 쏟아냄

- 만약에 std::cout으로 출력이 되지 않다면, 텍스트가 중요하지 않다는 뜻

- 그래서 일반적인 텍스트 출력 시, std::endl가, " Flush했는가? "는 것은 거의 중요하지 않게 됨

#include <iostream>

using namespace std;    

int main()
{
    cout << '\n' << endl;

    cout << "This is first line" << endl;
    cout << "second line";
    
    return 0;
}

 

출력문값



This is first line
second line
Process finished with exit code 0

- 첫번째 명령문에서 \nstd::endl으로 두개의 줄바꿈이 일어남

- 두번째 명령문에서 std::endl으로 줄이 바뀐 후(커서가 다음 행으로 이동 후), 세번째 명령문이 실행됨

 

‘\n’의 특징

- '\n' 문자는 커서를 다음 행으로 이동시키지만 불필요한 플러시를 하지 않으므로 성능이 더 좋음

- 하지만  '\n' 문자는 Flush를 하지 않으므로, 긴 문장 출력 시 버퍼에 담겨서 안나올 수 있음

- 장점으로는, '\n' 문자가 std::endl 보다 더 짧고 기존의 텍스트에 삽입될 수 있기 때문에 읽기 쉬운 경향이라는 점이 있음

#include <iostream>

using namespace std;

int main()
{
    using namespace std;

    /*     recognizing as a single character using \    */
    cout << int('\n') << endl;              //output: 10

    /*       printing " using \       */
    cout << " \"This is War!\" " << endl; //output: "This is War!"

    return 0;
}

- 텍스트 앞에 \을 붙이면 컴퓨터는 하나의 문자로 인식 -> 혼자 쓰일 경우에 ' 따옴표 '를 사용

- 예를 들어, \n은 두 문자처럼 보이지만, 컴퓨터는 n하나면 인식함(n이 new line을 뜻하는 하나의 문자로 봄)

- \를 이용하여 "을 출력할 수 있음(물론  ' 도 가능)

 

'\n'을 두 가지 다른 방법으로 사용하는 예

#include <iostream> // for std::cout
using namespace std;

int main()
{
    int x{ 5 };
    std::cout << "x is equal to: " << x << '\n'; // Using '\n' standalone
    std::cout << "And that's all, folks!\n"; // Using '\n' embedded into a double-quoted piece of text (note: no single quotes when used this way)
    
    return 0;
}

- 커서를 다음 행으로 이동하기 위해 '\n'을 단독으로 사용할 경우 작은 따옴표가 필요하다는 점에 유의

- 이미 이중 따옴표의 텍스트에 포함된 경우, 작은 따옴표는 필요하지 않음

 

std::flush란?

커서를 다음 행으로 줄바꿈하지 않고 Flush하는 것을 말합니다. 

std::endl와 Flush한다는 비슷한 기능을 가지지만, 줄바꿈을 하지 않는다는 차이가 있습니다.

#include <iostream>

using namespace std;

int main()
{    
    cout << "This is first line" << std::flush;
    cout << "second line";
    
    return 0;
}

 

출력값

This is first linesecond line
Process finished with exit code 0

 

 

 

 

 

 

 

* 해당 글은 홍정모님의 따라 배우는 C++과 learncpp에서 공부한 토대로 작성되었습니다.

Comments