탕구리's 블로그

스트림과 버퍼에 대해 알아보자! 본문

Conception

스트림과 버퍼에 대해 알아보자!

탕구리당 2018. 12. 17. 00:02
반응형



시작하기 전에

해당 블로그에 작성되는 글은 주인장의 지극히 주관적인 생각이 다수이며, 대부분의 지식은 구글링을 통해 얻고 있기 때문에 옳지않은 정보가 있습니다. 

잘못된 부분이나 수정해야 하는 부분이 있다면 과감히 덧글을 남겨주세요! 모르는게 많은 새싹입니다




오늘의 주제

오늘의 주제는 스트림과 버퍼입니다. 이미지에 관련된 작업을 하다가 스트림과 버퍼에 대한 개념이 많이 부족하다는 느낌을 받아서 개념을 한번 되짚어볼 기회가 생겨 정리를 하게 되었습니다. 최대한 간단하게 정리하려고 노력했으니 재밋게 읽어주세요!




스트림과 버퍼!


스트림이란?

스트림이란 배열이나 문자열 같든 데이터 컬렉션을 말하며, 자료를 입출력하기 위하여 사용하는 것이다. 프로그램과 입출력 장치 사이에서 입출력 자료들을 중계하는 역할을 담당한다. 즉, 입출력 과정에서 데이터들이 자유롭게 움직일 수 있도록 중간 다리 역할을 한다고 생각하면 편할 것 같아요.

간략하게 정리를 해보면


1.입출력 데이터를 입출력 순서에 의해서 순차적으로 처리되는 데이터 열

2.데이터를 이동시킬 수 있는 다리

3.전송되어야할 크기만큼 바이트들이 모여 만들어진 통로

4.통신을 목적으로한 바이트 단위의 집합


스트림은 크게 입력스트림출력스트림이 있습니다.

입력스트림은 입력장치로부터 입력을 받고 프로그램을 도착지로 향하는 스트림입니다.

반대로, 출력스트림은 프로그램을 시적점으로 출력장치 및 프로그램을 목적지로 하는 스트림입니다.


아래의 그림은 스트림의 흐름을 나타내는 그림입니다.


사실 그냥 개념적으로는 어려운 내용이 아닌데, 뭔가 잘 와닿지를 않아요...(머리론 알겠는데 마음이 몰라)

입출력에 관해 데이터를 담고있는 덩어리라고 생각하면 편할 것 같습니다.


버퍼란?

버퍼는 기본적으로 입출력 전송 속도차이에 대한 성능을 보완하기 위해 사용합니다. 입력속도에 비해 출력속도가 느린경우 데이터를 임시 저장하는 공간을 말하며, 임시저장장치라고도 합니다.


예를들어 사용자는 1초에 100개의 데이터, 프로그램은 1초에 5개의 데이터를 처리 할 수있다고 가정해봅시다. 프로그램에서 처리를 진행하는 동안 입력장치를 통해 들어오는 데이터는 대기를 해야하는 상황이 됩니다. 이러한 상황을 방지하기 위해 입력받은 데이터를 버퍼라는 임시공간에 저장해두고 프로그램에서 처리할 수 있는 상황이 혹은 버퍼가 꽉차게 되거나 개행문자가 입력되게 되면 버퍼에 저장된 데이터를 한 번에 전송하게 됩니다.


스트림에서 버퍼를 사용하는 경우와 사용하지 않는 경우는 다음과 같습니다.


이렇게 버퍼를 사용하게 되면, 운영체제의 API 호출 횟수를 줄여 입출력 성능을 개선하게 됩니다.

얼핏보면 스트림과 버퍼는 항상 묶여 다니는게 좋을것 같지만 그렇지도 않습니다. 빠른 반응이 요구되는 게임과 같은 프로그램에서는 입력이 이루어지는 즉시 전송이 이루어져 빠른 반응속도를 보여주어야 하는데 버퍼를 사용하는 경우 그렇지 않을 수 있으니까요!

반응형
Comments