프로젝트(MoovDa)를 진행하면서 반복문이 필요한 경우 전부 for문을 사용했다. for문을 사용한 이유는 단지 익숙함 때문이었다. 그렇게 프로젝트를 진행하다가, 우연히 “현업에서는 for문 대신 stream을 많이 사용해요. 한 번 적용해 보세요 !”라는 얘기를 들었다. 그 얘기를 듣고 바로 프로젝트에 적용했다.

한 번에 알아차릴 수 있는 것은 일단 코드가 깔끔해졌다. 단지 이 이유 때문에 stream을 사용하는 걸까?
stream이란 데이터 집합을 읽는 객체라고 생각하면 된다. 데이터를 모두 읽는 객체인 만큼 데이터를 다루는데 공통적으로 쓰일 기능들(정렬, 필터링, 반복문 등)을 가지고 있다.
stream은 데이터를 읽는 것이므로 원본 데이터를 변경하지 않는다. 원본 데이터를 깊은 복사할 필요 없이 stream 연산을 사용해서 새로운 컬렉션을 만들어낼 수 있다.
stream은 데이터를 모두 읽고 나면 사라지는 일회용이다. stream 객체를 만들어서 한 번 사용한 후 그것을 다시 사용할 경우 런타임 에러가 발생한다. 그래서 보통 stream 객체를 별도로 생성해서 사용하지 않는다.
stream을 사용한다는 것은 데이터가 여러 개라는 것인데, 그 여러 개의 데이터를 처리하려면 보통 반복문을 사용한다. stream을 사용하면 이미 구현되어 있는 유용한 연산들로 해결할 수 있다.
stream은 필요한 시점까지 연산을 미루고 필요한 데이터만 처리할 수 있다. 이는 메모리 사용량을 줄이고 효율적인 작업을 가능하게 한다.