[C++] 스트림(stream), 버퍼(buffer)

2024. 3. 26. 19:32Programming Language/C++

스트림과 버퍼는 입출력(I/O)과 관련이 있다.

C++ 프로그램은 파일이나 콘솔의 입출력을 직접 다루지 않고 스트림(stream)이라는 흐름을 통해 다룬다.

스트림(stream)

입출력을 처리하는 데 사용되며, 바이트(byte) 단위의 데이터 흐름을 의미한다.

• 입력 스트림(`std::cin`)과 출력 스트림(`std::cout`)을 제공한다.

• 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할을 한다.

• 스트림은 내부에 버퍼라는 임시 메모리 공간을 가지고 있다.

출처 : TCP Shool

장점

• 다양한 데이터 소스(파일, 콘솔 등)에서 읽고 쓰는 작업을 단순화한다.

• `std::cin`, `std::cout`처럼 이해하기 쉬운 인터페이스를 제공한다.

단점

• 데이터가 작으면 스트림이 직접 I/O하는 것보다 느릴 수 있다.

• I/O를 처리하는 데 스트림이 더 많은 메모리를 사용할 수 있다.

버퍼(buffer)

• 데이터를 처리하거나 전송하기 전에 임시로 저장하는 공간

• 스트림에서 데이터를 읽을 때 보통 데이터는 먼저 버퍼에 저장되고, 그 후에 접근한다.

스트림에 데이터를 쓸 때도 데이터는 먼저 버퍼에 저장되고, 나중에 파일, 콘솔 등에 전송된다.

버퍼를 이용하면 입력과 출력을 좀 더 효율적으로 처리할 수 있다.

출처 : TCP School

장점  

• 데이터를 임시로 저장하여 I/O 작업 수를 줄이므로 데이터 전송이 빨라진다.

• 문자를 하나씩이 아니라 큰 덩어리로 묶어서 한 번에 전달하기 때문에 전송 시간이 적게 걸려 성능이 향상된다.

• 사용자가 문자를 잘못 입력해도 수정이 가능하다.

단점

• 추가 메모리를 사용하기 때문에 데이터가 크거나 제한된 메모리 시스템에서는 문제가 될 수 있다.

• 데이터가 제대로 flush되지 않으면 지연이 발생할 수 있다.