[Java] Stream API이란?

나른한 개발자·2023년 6월 8일
0
post-custom-banner

Stream API?

자바8에 추가된 기능으로, 스트림 형태의 요소에 함수형 연산자를 지원해주는 클래스이다. 다양한 데이터 소스를 표준화된 방법으로 다룰 수 있다.

stream을 직역하면 "흐름"이라는 뜻인데, 자바에서는 데이터 요소들의 흐름을 의미한다. 즉, List, Map, Set 과 같은 Collection Framework 또는 배열과 같은 데이터 소스가 있을 때, 이들의 요소들이 스트림을 통해 하나씩 전달되어 연산을 거친다는 것이다.


중간연산, 최종연산

스트림이 한번 생성되면 스트림을 생성한 제너릭 타입에 상관없이 모두 같은 방식으로 연산을 적용시킬 수 있다.

  • 중간 연산: 연산 결과가 스트림인 연산으로 0~n번 수행할 수 있다.
  • 최종 연산: 연산 결과가 스트림이 아닌 연산으로 0~1번만 수행할 수 있다.

중간 연산, 최종 연산의 종류는 공식문서에서 확인할 수 있다.


특징

  • 스트림은 재사용할 수 없다. 최종 연산 후에는 스트림이 닫히기 때문에 필요시엔 스트림을 재생성해야한다.
  • 데이터 소스로부터 데이터를 읽기만 할 뿐 변경하지 않는다.
  • 지연 연산을 수행하여 작업을 최적화한다. 즉, 최종 연산이 수행되기 전까지 중간연산은 수행되지 않고, 어떤 연산을 수행해야하는지만 확인하는 작업을 거친 후 최종연산 수행 시 같이 수행된다. (참고: [Java]지연연산과 최적화)
  • 병렬 스트림으로 전환하여 스트림 작업을 병렬로 처리할 수 있다. (parallel())
  • IntStream, LongStream, DoubleStream등과 같은 기본형 스트림을 제공하여 기본형-참조형 간 오토박싱, 언박싱의 비효율성을 제거할 수 있다.




참고
[자바의 정석 - 기초편] ch14-15,16 스트림, 스트림의 특징

profile
Start fast to fail fast
post-custom-banner

0개의 댓글