C++ I/O 및 파일 조작 - 1. 개요 (Introduction)

2025. 3. 30. 00:16프로그래밍 언어/C++

 

📘 1. 개요 (Introduction)

✅ C++에서의 입출력 개념

C++에서 입출력(Input/Output, I/O)이란, 프로그램과 외부 환경(예: 사용자, 파일, 네트워크 등) 간에 데이터를 주고받는 과정을 의미합니다.

  • 입력(Input): 외부에서 프로그램으로 데이터를 전달하는 것 (예: 키보드 입력)
  • 출력(Output): 프로그램의 처리 결과를 외부로 전달하는 것 (예: 화면 출력)

C++은 이러한 입출력 기능을 표준 라이브러리를 통해 제공합니다.

  • <iostream>: 콘솔 입출력
  • <fstream>: 파일 입출력

이를 통해 C++은 다양한 데이터 입출력 상황에서 유연하고 강력한 처리를 지원합니다.


✅ 스트림(Stream)의 개념

C++의 입출력은 스트림(stream)이라는 개념에 기반을 두고 설계되어 있습니다.
스트림이란 데이터를 순차적으로 읽거나 쓰는 데이터의 흐름을 추상화한 개념입니다.

  • 입력 스트림: 외부에서 프로그램 내부로 데이터를 전달 (cin, ifstream 등)
  • 출력 스트림: 프로그램에서 외부로 데이터를 전달 (cout, ofstream 등)

📌 스트림 버퍼(Buffer)

스트림은 내부적으로 스트림 버퍼(stream buffer)를 사용하여 데이터를 임시로 저장합니다.
이는 입출력의 성능을 향상시키기 위한 메커니즘으로, 데이터를 일정량 모은 후 한 번에 처리함으로써 I/O 작업 횟수를 줄입니다.

  • cout은 출력 내용을 버퍼에 저장한 뒤, 버퍼가 가득 차거나 std::endl, std::flush 호출 시 실제 출력
  • cin 역시 입력을 버퍼에서 먼저 처리한 뒤 프로그램으로 전달

이러한 구조는 C++ 입출력을 보다 효율적이고 일관성 있게 처리할 수 있게 해줍니다.


✅ 객체 지향적인 입출력 모델

C++의 입출력 시스템은 객체 지향(Object-Oriented)적으로 설계되어 있습니다.
입출력은 모두 클래스 기반의 객체를 통해 이루어지며, 다음과 같은 주요 클래스를 중심으로 구성됩니다.

클래스 용도 대표 객체 예시
istream 입력 스트림 클래스 cin, ifstream
ostream 출력 스트림 클래스 cout, ofstream
fstream 입력 + 출력 fstream
  • <<, >> 연산자는 각각 출력 및 입력 연산에 대해 연산자 오버로딩되어 있어, 객체와 직관적으로 입출력을 연결할 수 있습니다.
  • 사용자 정의 타입도 <<, >> 연산자를 오버로딩하여 입출력 기능을 확장할 수 있습니다.

이러한 객체 지향적 설계는 재사용성과 확장성이 뛰어나며, 다양한 입출력 환경에 유연하게 대응할 수 있도록 돕습니다.


✅ 표준 입출력 vs 파일 입출력

구분 표준 입출력 (Standard I/O) 파일 입출력 (File I/O)
대상 콘솔 (키보드, 화면) 파일 (텍스트, 바이너리 등)
헤더 <iostream> <fstream>
객체 cin, cout, cerr, clog ifstream, ofstream, fstream
  • 표준 입출력은 주로 사용자와의 실시간 상호작용(입력/출력)에 사용됩니다.
  • 파일 입출력은 데이터를 저장하거나 불러오는 데 사용되며, 대량의 데이터를 처리할 때 특히 유용합니다.