스트림의 등장
스트림 API는 다량의 데이터 처리 작업(순차 or 병렬)을 돕고자 자바 8에 추가되었다. 이 API가 제공하는 추상 개념 중 핵심은 두 가지다.
스트림
스트림은 데이터 원소의 유한 혹은 무한 시퀀스를 뜻한다.
스트림 파이프라인
스트림 파이프라인은 이 원소들로 수행하는 연산 단계를 표현하는 개념이다. 소스 스트림에서 시작해 종단 연산으로 끝나며 중간에 하나 이상의 중간 연산이 들어갈 수 있다. 스트림 파이프라인은 지연평가 된다. 평가는 종단 연산이 호출될 때 이뤄지며, 종단 연산에 쓰이지 않는 데이터 원소는 계산이 쓰이지 않는다.
스트림의 단점
- 람다에서는 final이거나 사실상 final인 변수만 읽을 수 있고, 지역변수를 수정하는 건 불가능하다.
- 코드 블럭에서는 return, break, continue를 사용하거나 예외를 던질 수 있다. 하지만 람다는 불가능하다.
스트림의 사용 후보
- 원소들의 시퀀스를 일관되게 변환한다.
- 원소들의 시퀀스를 필터링한다.
- 원소들의 시퀀스를 하나의 연산을 사용해 결합한다(더하기, 연결하기, 최솟값 구하기 등)
- 원소들의 시퀀스를 컬렉션에 모은다(공통된 속성을 기준으로 묶어 가며)
- 원소들의 시퀀스에서 특정 조건을 만족하는 원소를 찾는다.
TIP
- 람다에서는 타입 이름을 자주 생략하므로 매개변수 이름을 잘 지어야 스트림 파이프라인의 가독성이 유지된다.
- 도우미 메서드를 적절히 활용하는 일의 중요성은 일반 반복코드에서보다는 스트림 파이프라인에서 훨씬 크다.
- char값들을 처리할 때는 스트림을 사용하지 않는 편이 좋다.
-> (int값으로 출력하기 때문에 명시적인 형변환이 필요하다.) - 스트림을 반환하는 메서드 이름은 원소의 정체를 알려주는 복수 명사로 쓰는 것이 좋다.