<aside> 😊 stream의 개념과 특징에 대해 정리한 페이지입니다 :)
</aside>
stream
- 컬렉션의 저장요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자
- 데이터를 추상화하고, 처리하는데 자주 사용되는 함수들을 정의
-> 데이터를 추상화하였다는 것은 데이터의 종류에 상관 없이 같은 방식으로 데이터를
처리 할 수 있다는 것을 의미하며, 그에 따라 재사용성을 높일 수 있음
stream 특징
🐊 람다식으로 요소 처리 코드를 제공
- 코드가 간결해지는 장점이 있음
🐢 내부 반복자를 사용하므로 병렬 처리가 쉬움
- 내부 반복자 : 컬렉션 내부에서 요소들을 반복시키고, 개발자는 요소당 처리해야 할 코드만
제공하는 코드 패턴
- 반복문 forEach라는 함수 내부에 숨겨져 있음
🐍 중간 처리와 최종 처리가 존재
- 중간처리 : 매핑, 필터링, 정렬을 수행함
- 최종처리 : 반복, 카운팅, 평균, 총합 등의 집계 처리를 수행함
🐉 stream은 일회용
- 한번 사용이 끝나면 재사용이 불가능
- Stream이 또 필요한 경우에는 Stream을 생성해 주어야 함
- 닫힌 Stream을 다시 사용하게 되면 IllegalStateException이 발생
🦕 원본의 데이터를 변경하지 않음
- Stream API는 원본의 데이터를 조회하여 원본의 데이터가 아닌 별도의 요소들로
Stream을 생성
- 그렇기 때문에 데이터로부터 읽기만 함
- 정렬이나 필터링 등의 작업은 별도의 Stream 요소들에서 처리
<aside> ❗ stream을 이해하기 쉽게 예를 하나 들어보겠습니다
</aside>
학생 객체를 요소로 가지는 컬렉션이 있다고 가정하면, 중간처리에서 학생의 수학 점수를
뽑아 내고 최종 처리에서는 수학 점수의 평균값을 산출하는 행위를 할 수 있음