더북(TheBook)

4.2 스트림

 

컴퓨터학에서 정의하는 스트림(stream)이란 순서가 있는 데이터 원소의 집합을 캡슐화하여 유저가 그 데이터를 읽거나 쓸 수 있게 해 주는 자료구조이다.

스트림은 출력 스트림이거나 입력 스트림, 혹은 입출력 스트림 셋 중 하나이다. 출력 스트림은 배수구에 비유할 수 있는데, 사용자는 출력 스트림에 순서대로 데이터 원소를 부어 넣을 수 있지만 거기서 도로 읽어 들이지는 못한다. 반면 입력 스트림은 데이터 원본으로 사용되어 사용자가 데이터 원소를 순서대로 끄집어낼 수 있지만 데이터를 쓰는 기능은 제공하지 않는다. 입출력 스트림은 데이터 읽기 및 쓰기 기능을 모두 제공하는데, 읽고 쓰기를 동시에 할 수 있는 것도 있다.1

데이터 구조체나 컴퓨팅 자원을 내부에 감싸두고, 스트림을 이에 접근하는 인터페이스로 제공하는 경우도 많다. 예를 들어 파일에 기록할 때 파일 출력 스트림을 열면 사용자가 간단히 멤버 함수를 호출해 여러 가지 형식의 데이터를 디스크에 순서대로 기록할 수 있다. 또한, 네트워크 스트림으로 소켓의 send()recv() 함수를 감싸두면 사용자에게 필요한 특정 자료형을 간편하게 읽거나 쓸 수 있다.

 


 

1  역주 병행성(concurrency) 보장하는 스트림은, 여러 스레드가 동시에 접근하여 읽고 쓸 수 있다. 하지만 입력 전용 또는 출력 전용 스트림에 비해 구현이 복잡하거나 성능상 불리한 점이 있을 수 있으므로 사용하려는 스트림의 병행성 지원 여부 및 제약 사항을 꼭 확인해 두자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.