1. Stream?
- Collection, Array 등에 저장된 Element들을 하나씩 참조하면서 Code를 실행할 수 있는 기능을 말함
- Stream을 사용하면서 불필요한 for문을 사용하지 않을 수 있고, 람다식을 활용할 수 있어 Code를 직관적이게 처리할 수 있음
2. Stream Feature?
- Data를 담는 저장소는 아님
- Data를 변경하지 않음
- 재사용할 수 없음
- 각 Element가 1번씩 처리됨
- Infinite일 수 도 있음
3. Stream API
- Data.Stream().중개연산()..종료연산(); 구조로 사용됨
- 제공하는 Method는 중개형과 종료형으로 나눌 수 있음
- 중개연산
- 계속 연산을 추가할 수 있음
- Stream을 Return함
- Lazy함(종료 연산이 오기 전에는 실행하지 않는다는 의미)
- Stateless / Stateful Operation으로 구분할 수 있음(sorted의 경우 Stateful, 이전 Data를 참조하기 때문임)
- filter, map, limit, kip, sorted …
- 종료연산
- 더 이상 연산을 연결할 수 없음
- Stream을 Return하지 않음
- collect, allMatch, count, forEach, min, max, …
4. ParallelStream
- Data.paralleStream().중개연산().종료연산();
- Stream과 하는 일은 동일하지만, Data를 병렬로 처리하기 때문에 대용량 Data의 경우에는 performance가 더 좋음
- 기본적으로 별도의 Thread pool을 사용하는게 아니라, Thread pool 1개를 모든 ParrelStream이 공유하는 구조라 내부에서 DB Call 및 HTTP Request등의 Code를 실행하면 Thread pool에 병목이 발생하므로, 주의해서 사용해야함