C++시작과 문법

file stream과 stringstream 기본

파일을 읽고 쓰는 `fstream`과 문자열 버퍼를 스트림처럼 다루는 `stringstream`의 역할과 차이를 함께 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

cpp
#include <fstream>
#include <sstream>
#include <string>

std::ifstream input("scores.txt");
std::string line;

while (std::getline(input, line)) {
    std::stringstream ss(line);
    std::string name;
    int score{};
    ss >> name >> score;
}

설명

  • C++의 stream 모델은 콘솔 입출력만이 아니라 파일, 문자열 버퍼, 메모리 버퍼까지 같은 인터페이스로 다루게 해 줍니다. 그래서 istreamostream 계열 개념을 한 번 이해하면 적용 범위가 넓어집니다.
  • ifstream은 파일에서 읽을 때, ofstream은 파일에 쓸 때, fstream은 읽기와 쓰기를 함께 할 때 사용합니다. 즉 "대상"이 파일일 뿐 기본 조작 감각은 cin, cout과 이어집니다.
  • stringstream은 문자열을 stream처럼 다루는 도구입니다. 한 줄을 여러 필드로 파싱하거나, 여러 값을 포맷팅해 문자열을 만들 때 유용합니다.
  • 중요한 것은 "stream 상태"를 읽는 습관입니다. 파일이 열렸는지, 읽기가 성공했는지, 형식이 예상과 맞는지를 조건문과 함께 확인해야 안정적인 코드가 됩니다.
  • 교재 관점에서는 file I/O와 parsing을 분리해 보는 감각이 중요합니다. 파일에서 한 줄을 읽고, 그 줄을 다시 stringstream으로 해석하면 구조가 훨씬 분명해집니다.

빠른 정리

타입역할
std::ifstream파일 읽기
std::ofstream파일 쓰기
std::fstream파일 읽기/쓰기
std::stringstream문자열 파싱/조립
std::getline한 줄 읽기

주의할 점

stream이 열렸는지와 읽기가 성공했는지를 확인하지 않으면, 파일이 없거나 형식이 잘못됐을 때 조용히 빈 값만 남을 수 있습니다. file I/O는 항상 상태 확인과 함께 가는 편이 안전합니다.

참고 링크

2 sources