스트림이란
- 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소
컬렉션과의 차이?
- 반복 방식 : 컬렉션은 이터레이터라는 외부 객체를 생성, 스트림은 내부적으로 처리
- 계산 방식 : 컬렉션은 데이터를 일단 메모리에 모두 불러와 계산, 스트림은 필요한 요소만을 처리
- 연산 방식 : 컬렉션은 데이터 변경 및 추가 가능, 스트림은 요소를 변환하거나 걸러내는 중간 연산과, 최종 연산의 두 가지 연산만 가능
스트림 구조
- 생성 : 컬렉션, 배열, 파일 등으로 부터 만들어 짐
- 가공 : 중간 연산자를 lazy한 연산을 수행(최종 연산 수행 전까지 연산이 반영되지 않음)
- 소비 : 최종 결과를 만들기 위한 연산, stream이 소비된 것으로 간주
스트림의 장단점
-
장점
- 가독성
- 코드의 변경이 쉽다(메서드의 순서만 바꾸면 됨)
- 병렬처리를 간단하게 구현할 수 있다(Parallel stream)
-
단점
- 높은 computing 비용 (스트림 객체 생성 오버헤드, 중간 처리 등)
요즘은 유지보수에 투자하는 비용이 하드웨어 비용보다 높으므로 스트림을 잘 사용하면 효율을 얻을 수 있다.