..

Search

74) 스트림과 버퍼

74) 스트림과 버퍼

스트림과 버퍼


C++ 입출력

C++은 C언어와 마찬가지로 입출력에 관한 기능을 언어에서 기본적으로 제공하지 않습니다.

그 이유는 컴파일러를 만들 때 입출력 기능을 해당 하드웨어에 가장 적합한 형태로 만들 수 있도록 컴파일러 개발자에게 권한을 주기 위해서입니다.

 

하지만 대부분의 C++ 컴파일러는 iostream과 fstream 헤더 파일에 정의되어 있는 클래스 라이브러리를 제공합니다.

iostream과 fstream 클래스 라이브러리의 중요 개념 중 하나가 바로 스트림(stream)입니다.

 

iostream 클래스에 대한 더 자세한 사항은 C++ iostream 수업에서 확인할 수 있습니다.

 

C++ iostream 수업 확인 =>


스트림(stream)

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

스트림(stream)이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미합니다.

즉, 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할을 합니다.

 

스트림


버퍼(buffer)

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

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

 

buffer

 

버퍼를 사용하면서 얻을 수 있는 장점은 다음과 같습니다.

 

1. 문자를 하나씩 전달하는 것이 아닌 묶어서 한 번에 전달하므로, 전송 시간이 적게 걸려 성능이 향상됩니다.

2. 사용자가 문자를 잘못 입력했을 경우 수정을 할 수가 있습니다.

 

하지만 입력 작업에 버퍼를 사용하는 것이 반드시 좋은 것만은 아닙니다.

빠른 반응이 요구되는 게임과 같은 프로그램에서는 키를 누르는 즉시 바로 전달되어야만 합니다.

 

이렇게 버퍼를 사용하는 입력과 버퍼를 사용하지 않는 입력은 서로 다른 용도로 사용됩니다.

따라서 자신의 목적에 맞게 버퍼의 사용 여부를 판단해야 합니다.

 

대부분의 C++ 프로그램은 입력 시에는 사용자가 Enter 키를 누르면 입력 버퍼를 비우고, 출력 시에는 개행 문자를 전달받으면 출력 버퍼를 비우게 됩니다.

연습문제