입출력 스트림의 개요
C++ 언어에서는 스트림 객체를 통하여 입출력을 수행하는데, 입출력과 관련이 있는 클래스들에 대해서는 <iostream>에 정의되어 있다.
스트림과 버퍼
C++ 프로그램은 입력과 출력을 '문자의 흐름(스트림)' 으로 취급한다. 컴퓨터의 입출력에서 주로 취급하는 정보의 단위는 문자이다.
스트림이란 시냇물과 같이 문자들이 계속 흘러간다는 의미이다. 입력장치와 프로그램 사이 그리고 프로그램과 출력장치 사이에 문자가 흘러갈 수 있는 통로가 있다고 생각하는 것이다.
프로그램에서 입출력 장치 간에 데이터를 원활하게 전송할 목적으로 버퍼를 사용한다. 버퍼는 물을 저장하는 물탱크와 같은 역할을 수행한다. 일반적으로 디스크는 데이터 블록 단위(운영체제에 따라 블록의 크기는 다르지만, 일반적으로 512바이트의 배수)로 데이터를 전송하지만, 프로그램은 한 번에 한 바이트씩 데이터를 전송한다.
프로그램은 버퍼에 데이터를 기록하고 버퍼가 다 채워지면 한 번에 디스크로 기록함으로써 프로그램을 빠르게 실행할 수 있다.
표준 입출력 클래스
- ios_base 클래스 : 스트림 클래스의 기초 클래스로 입력 및 출력 스트림에 공통적인 저장공간 및 멤버함수들을 포함한다.
- ios 클래스 : ios_base 클래스를 상속받으며, streambuf 객체 포인터를 멤버로 보유하고 있다.
- streambuf 클래스 : 기억장치의 버퍼를 엑세스하고 관리하는 속성 및 멤버함수를 지원한다.
- istream 클래스 : ios 클래스를 상속받으며, 입력을 위한 멤버함수를 제공한다.
- ostream 클래스 : ios 클래스를 상속받으며, 출력을 위한 멤버함수를 제공한다.
- iostream 클래스 : istream 클래스와 ostream 클래스를 모두 상속받으며, 입력을 위한 멤버함수와 출력을 위한 멤버함수를 모두 제공한다.
- fstream, ifstream, ofstream 클래스 : 파일 입출력을 위한 스트림이다.
프로그램에 <iostream>을 포함시키면 다음과 같은 4개의 스트림 객체가 자동으로 생성된다.
- cin 객체(표준 입력 스트림 객체) : 표준 입력장치인 키보드와 연결되어 있다.
- cout 객체(표준 출력 스트림 객체) : 표준 출력장치인 모니터와 연결되어 있다.
- cerr 객체(표준 오류 스트림 객체) : 오류 메시지를 출력할 스트림으로 표준 출력장치인 모니터와 연결되어 있다. 오류를 즉시 출력하기 위하여 버퍼를 운영하지 않는다.
- clog 객체(표준 로그 스트림 객체) : 로그 메시지를 출력할 스트림으로 표준 출력장치로 연결되어 있으나 버퍼를 운영하여 로그 메시지를 출력한다.
스트림의 자리이동 연산자 다중정의
cin >> 객체;
'입력 스틀미에서 객체로 문자들을 자리이동한다'
cout << 객체;
'객체에서 출력 스트림으로 문자들을 자리이동한다'
cin을 이용한 입력
cin은 표준 입력 스트림인 istream의 객체이다. istream은 연산자 >>를 다음과 같이 다중정의하고 있다.
istream& operator>>(type&);
cin 객체는 표준 입력 문자들의 흐름(문자 스트림)으로 표현하며 일반적으로 표준 입력장치는 키보드이다.
cin >> vFloat;
//키보드에서 입력되는 문자열을 실수형 데이터 형식으로 변환하여 그 값을 변수 vFloat에 저장한다.
입력 문자열의 구분
데이터를 읽어들일 때 입력 스틀미에 들어 있는 공백은 무시되며 데이터를 구분하는 구분자로 사용된다.
입력 스트림을 구분하는 규칙
- 단일 문자형의 경우에 >> 연산자는 문자단위로 끊어서 변수에 저장한다.
- 숫자를 저장하는 자료형 변수의 경우 입력 스트림에 백색문자가 나타나거나 숫자가 아닌 문자가 나타날 때까지 끊어서 변수의 형에 맞도록 변환한다. 입력할 때에는 소수점도 인식한다.
- 문자형 포인터를 사용하여 문자열을 입력하는 경우에는 입력 스트림에서 백색문자가 나타날 때까지 입력된 문자들을 문자열로 취급한다.
입력 스트림의 함수
- get(void), get(char&) : 공백을 건너뛰지 않고 문자 1개를 입력한다.
- get(char*, int, char), getline(char*, int, char) : 1개의 줄 전체를 읽어들이는 문자열 입력 기능을 제공한다.
- ignore(int, int) : 라인의 긑이나 파일의 끝과 같은 구분자를 만날 때까지 입력 스트림에 남아 있는 문자들을 제거한다.
- peek(void) : 1개의 문자를 읽어 오지만 입력 스트림에서 그 문자를 제거하지 않고 남겨 둔다.
- putback(char) : 1개의 문자를 입력 스트림의 제일 처음에 삽입한다.
출처 : 전중남·이병래. 「C++프로그래밍」. 한국방송통신대학교출판문화원. 2020
'프로그래밍언어 > C++' 카테고리의 다른 글
[C++] 입출력 스트림 (2) (0) | 2023.09.25 |
---|---|
[C++] 예외처리 (0) | 2023.09.23 |
[C++] 템플릿 (2) (0) | 2023.09.21 |
[C++] 템플릿 (1) (0) | 2023.09.19 |
[C++] 상속 (2) (0) | 2023.09.17 |