[로봇활용_13주차] C# 스트림(Stream)이란?

최윤호·2025년 11월 3일
post-thumbnail

파일을 다루기 전 필수 관문

C#에서는 파일에 데이터를 쓰거나 읽기 위해 스트림(Stream)이라는 개념을 사용합니다.
처음 들으면 조금은 막연하게 느껴질 수 있지만, 사실 스트림은 파일뿐만 아니라
네트워크, 메모리 등 다양한 데이터 입출력을 다루는 근본적이고 중요한 개념입니다.
이번 글에서는 스트림(Stream)이 대체 무엇인지 그 개념에 대해 알아보겠습니다.

1)스트림(Stream), 대체 뭔가요?

스트림(Stream)데이터가 흐르는 통로 또는 연속적인 데이터의 흐름을 의미합니다.

수도꼭지를 틀면 물이 파이프를 통해 흘러나오는 것처럼, 스트림도 마찬가지로
데이터가 바이트(byte) 단위로 순서대로 흐를 수 있게 해주는 '통로' 역할을 합니다.
데이터의 시작점과 끝점이 어디든 상관없이, 하나의 표준화된 방법으로 제공합니다.

스트림은 기본적으로 두 가지 일을 할 수 있어요.

  • 읽기(Read): 통로로부터 데이터를 가져오는 작업입니다.
  • 쓰기(Write): 통로로 데이터를 흘려보내는 작업입니다.

2)스트림의 장점

"그냥 파일 전체를 한 번에 읽거나 쓰면 안 되나요?"라고 생각할 수 있어요.
물론 작은 파일이면 괜찮지만, 스트림을 사용하면 효율적인 프로그램을 만들 수 있습니다.

1. 메모리 효율성
만약 30GB짜리 거대한 동영상 파일을 컴퓨터가 처리한다고 상상해보세요.
컴퓨터의 메모리(RAM)가 8GB라면, 이 파일을 통째로 메모리에 불러오기 힘들겠죠?
스트림은 파일 전체를 메모리에 올리지 않고, 필요한 만큼 조금씩 읽어와서 처리합니다.
덕분에 아무리 큰 파일이라도 적은 메모리로 처리할 수 있게 됩니다.

2. 추상화
C#에서 스트림은 일종의 '설계도'와 같아요.
이 설계도를 바탕으로 다양한 종류의 '수도관'을 만들어 놨어요.

  • 파일과 연결하는 수도관: FileStream
  • 네트워크와 연결하는 수도관: NetworkStream
  • 메모리와 연결하는 수도관: MemoryStream

3. 일관성 있는 프로그래밍: 파일, 네트워크, 메모리 등 데이터 소스의 종류에 관계없이
Read()Write()라는 동일한 방식으로 데이터를 다룰 수 있습니다.

4. 유연성: 필요에 따라 데이터 소스를 파일에서 메모리 버퍼로, 또는 네트워크 스트림으로
전환할 수 있으며, 기존 코드의 큰 수정 없이 처리 방식만 변경할 수 있습니다.

3)C#의 다양한 스트림 친구들

C#에서는 System.IO.Stream이라는 추상 클래스가 모든 스트림의 '조상' 역할을 합니다.
그리고 각각의 목적에 특화된 다양한 '자손'의 스트림 클래스들이 존재합니다.

  • FileStream: 파일에 데이터를 읽고 쓸 때 사용하는, 가장 대표적인 스트림입니다.
  • MemoryStream: 메모리(RAM)를 데이터의 통로로 사용합니다.
  • NetworkStream: 네트워크를 통해 데이터를 주고받을 때 사용합니다.
  • BufferedStream: 다른 스트림을 감싸서 '버퍼(Buffer)'라는 임시 저장 공간을 만듭니다.
    데이터를 한 번에 모아서 처리하기 때문에 성능을 향상시키는 데 도움을 줍니다.

4)스트림 접근 방식

System.IO.Stream클래스는 기본적으로 '순차 접근'을 포함하고 있으며,
스트림(Stream)의 종류에 따라 '임의 접근'도 할 수 있습니다.

1. 순차 접근 (Sequential Access) - 소설책처럼 읽기

  • 비유: 책의 첫 페이지부터 순서대로 차근차근 읽는 방식입니다.
    1페이지, 2페이지, 3페이지... 이렇게 건너뛰지 않고 순서대로만 진행하는 거죠.
  • 개념: 데이터를 처음부터 끝까지 순서대로만 읽거나 쓸 수 있는 방식
  • 순차 접근만 지원하는 스트림
    • NetworkStream: 네트워크 통신은 기본적으로 데이터가 순서대로 흐릅니다.
    • CryptoStream: 대부분의 암호화/복호화 방식은 '순차 접근'이 효율적입니다.

2. 임의 접근 (Random Access) - 사전처럼 찾아보기

  • 비유: 책의 목차나 색인(index)을 보고 원하는 페이지로 바로 넘깁니다.
  • 개념: 데이터의 특정 위치(주소)로 이동해서 거기서부터 데이터를 읽거나 쓸 수 있는 방식
  • 임의 접근도 할 수 있는 스트림
    • FileStream: 파일은 임의 접근이 가능한 매체입니다.
    • MemoryStream: 메모리는 임의 접근이 가능한 매체입니다.

5)정리하며

C#에서 스트림(Stream)의 개념을 잘 이해하고 나면
앞으로 데이터를 다루는 일이 훨씬 수월하답니다.

  • 스트림이란? 데이터가 흐르는 통로이자, 데이터 입출력을 다루는 표준화된 방식이다.
  • 스트림의 장점은? 메모리 효율성, 추상화, 일관성 있는 프로그래밍, 유연성
  • 스트림의 접근 방식은? 순차 접근, 임의 접근
profile
🚀 미래의 엔지니어를 꿈꾸는 훈련생의 기록 📝

0개의 댓글