이번에 coroutine flow에 대해서 배우고 적용해보고자 하고 있었는데, 어째 블로그들이 상세한 설명은 해 주지 않고, 코루틴의 스트림이다. 그냥 스트림 쓰는 대로 쓰면 된다. 이런 식으로 설명을 해주는 것을 보았다.
아아니 대체 스트림이 뭔줄 알고 제가 그걸 알아들어요.. 그래서 스스로 스트림에 대해 알아 보기로 하였다.
당연히 여기서 말하는 스트림은 java 8에서 추가된 아름다운 그 스트림이 아니다. 그거 말고 백준 문제 풀 때 자주 등장하는 그분.. InputStream 이런 친구들이 바로 이번에 다루게 될 stream이다.
스트림은 한 방향으로만 통신할 수 있다는 성질을 가지고 있다. 따라서 자바에서도 보면 InputStream과 OutputStream이 구분되어 있는 것을 확인할 수 있다.
영어로의 의미는 흐르는 시냇물이라는 뜻이며, 순서대로 물 흐르듯이 전송되는 데이터 열을 의미한다고 한다.
디스크 상의 파일, 장치 등등을 통일된 방식으로 다루기 위한 가상적인 개념이다. 따라서 스트림을 사용하면, 프로그래머는 많은 것들을 신경쓰지 않으면서 자유롭게 이러한 것들과 연결될 수 있는 점이 편하다고 한다.
이게 무슨 뜻인지 이해하기 어려웠는데, 빨대라는 비유를 듣고 아! 하고 약간 반짝이게 되었다. 빨대라는 도구가 있으면, 음료수가 콜라든 쥬스든 커피든, 마시는 놈이 영희든 철수든 나든 아무튼 서로가 편하지 않는가! 바로 그러한 존재가 스트림이라고 한다.
스트림은 대부분 버퍼라는 공간을 가지고 있으며, 이 공간을 통해 일정량을 모으고 처리하게 된다고 한다. buffer가 필요한 이유는 cpu 와 입출력 장치 간의 속도 차이 때문이라고 한다.
자바에서 스트림은 바이트 단위로 데이터를 전송한다고 한다. 아마 이 부분은 코틀린도 동일할 것이라고 생각된다.
http://www.tcpschool.com/java/java_io_stream
http://www.ktword.co.kr/test/view/view.php?m_temp1=1311
https://genesis8.tistory.com/230