[JAVA] Stream API에 대해 알아보자
JAVA SE8 이전까지의 많은 양의 데이터를 담은 배열 or 컬렉션을 어떻게 핸들링 했나?
- 저장된 대량의 데이터에 접근하기 위해 반복문 or 반복자(iterator)를 사용
- 그랬을 때, 새로운 코드를 매번 작성해야 함
- 단점
- 가독성이 떨어진다
- 코드 재사용성이 떨어진다
→ 데이터베이스의 퀄리와 같이 정형화된 처리 패턴을 가지지 못하기 때문에 데이터마다 다른 방법을 사용해야 함
그럼 Stream이 어떻게 가독성과 코드 재사용성을 높여줄까?
- 데이터를 추상화한다
→ 다양한 방식으로 저장된 데이터를 읽고 쓰기 위한 공통된 처리방식이 존재
- 배열과 컬렉션 뿐이 아니다
→ 파일에 저장된 데이터도 같은 방식으로 핸들링 가능해짐
Stream의 특징을 알아보자
- 외부 반복(컬렉션을 핸들링하듯)이 아닌 내부 반복을 통해 작업을 수행
- 재사용이 가능한 컬렉션과는 달리 ↔ 단 한번만 사용가능
- 원본 데이터를 변경하지 않음
- 스트림의 연산이 filter-map 기반 API를 사용으로 지연 연산이 가능
- 스트림은 parallelStream()메서드로 손쉽게 병렬처리를 지원한다, 다만 병렬처리가 성능을 무조건 높여주는 것이 아님은 명시
Stream의 동작 3단계
- 스트림의 생성
- 스트림의 중개 연산( 스트림의 변환 )
- 스트림의 최종 연산