2024. 3. 26. 19:32ㆍProgramming Language/C++
스트림과 버퍼는 입출력(I/O)과 관련이 있다.
C++ 프로그램은 파일이나 콘솔의 입출력을 직접 다루지 않고 스트림(stream)이라는 흐름을 통해 다룬다.
스트림(stream)
• 입출력을 처리하는 데 사용되며, 바이트(byte) 단위의 데이터 흐름을 의미한다.
• 입력 스트림(`std::cin`)과 출력 스트림(`std::cout`)을 제공한다.
• 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할을 한다.
• 스트림은 내부에 버퍼라는 임시 메모리 공간을 가지고 있다.
장점
• 다양한 데이터 소스(파일, 콘솔 등)에서 읽고 쓰는 작업을 단순화한다.
• `std::cin`, `std::cout`처럼 이해하기 쉬운 인터페이스를 제공한다.
단점
• 데이터가 작으면 스트림이 직접 I/O하는 것보다 느릴 수 있다.
• I/O를 처리하는 데 스트림이 더 많은 메모리를 사용할 수 있다.
버퍼(buffer)
• 데이터를 처리하거나 전송하기 전에 임시로 저장하는 공간
• 스트림에서 데이터를 읽을 때 보통 데이터는 먼저 버퍼에 저장되고, 그 후에 접근한다.
스트림에 데이터를 쓸 때도 데이터는 먼저 버퍼에 저장되고, 나중에 파일, 콘솔 등에 전송된다.
• 버퍼를 이용하면 입력과 출력을 좀 더 효율적으로 처리할 수 있다.
장점
• 데이터를 임시로 저장하여 I/O 작업 수를 줄이므로 데이터 전송이 빨라진다.
• 문자를 하나씩이 아니라 큰 덩어리로 묶어서 한 번에 전달하기 때문에 전송 시간이 적게 걸려 성능이 향상된다.
• 사용자가 문자를 잘못 입력해도 수정이 가능하다.
단점
• 추가 메모리를 사용하기 때문에 데이터가 크거나 제한된 메모리 시스템에서는 문제가 될 수 있다.
• 데이터가 제대로 flush되지 않으면 지연이 발생할 수 있다.
'Programming Language > C++' 카테고리의 다른 글
[C++] 문자열 함수 - strlen(), strcat_s(), strcmp(), strcpy_s() (0) | 2024.03.27 |
---|---|
[C++] 문자열 (0) | 2024.03.26 |
[C++] 주석(Comment), 세미콜론(;) (0) | 2024.03.25 |
[C++] 문자 (0) | 2024.03.24 |
[C++] namespace, using, 입출력 구현 (cin, cout) (0) | 2024.03.19 |