Java 8 (Stream API)

발행: (2025년 12월 15일 오후 05:39 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

Stream API의 특징

  • 선언형 – 함수형 스타일을 사용해 간결하고 읽기 쉬운 코드를 작성합니다.
  • 지연 평가 – 최종 연산이 필요할 때만 연산이 실행됩니다.
  • 병렬 실행 – 멀티코어 프로세서를 활용할 수 있도록 병렬 스트림을 지원합니다.
  • 재사용 가능한 연산map(), filter(), sorted()와 같은 연산을 체이닝할 수 있습니다.
  • 저장소 없음 – 스트림은 데이터를 저장하지 않고, 오직 처리만 합니다.

스트림은 내부적으로 어떻게 동작하나요?

  1. 스트림 생성 – 컬렉션, 배열 또는 정적 메서드에서 생성합니다.
  2. 중간 연산 적용 – 데이터를 변환합니다(예: filter(), map(), sorted()).
  3. 최종 연산 적용 – 결과를 생성합니다(예: forEach(), collect(), reduce()).

스트림 생성 방법

  • 컬렉션에서list.stream() 또는 set.stream().
  • 배열에서Arrays.stream(array).
  • Stream.of() 사용 – 고정된 값 집합으로 스트림을 생성합니다.
  • 무한 스트림Stream.iterate() 또는 Stream.generate() 로 무한 시퀀스를 생성합니다.

Stream creation diagram

Another creation example

중간 연산

중간 연산은 스트림을 다른 스트림으로 변환합니다. 흔히 사용되는 연산은 다음과 같습니다:

  • filter() – 조건에 따라 요소를 필터링합니다.
  • map() – 각 요소를 다른 값으로 변환합니다.
  • sorted() – 요소를 정렬합니다.
  • distinct() – 중복을 제거합니다.
  • skip() – 처음 n개의 요소를 건너뜁니다.

Intermediate operations diagram 1

Intermediate operations diagram 2

스트림 종류

순차 스트림

단일 스레드에서 요소를 하나씩 처리합니다. stream()을 호출하면 기본적으로 생성됩니다.

Sequential stream diagram 1

Sequential stream diagram 2

병렬 스트림

여러 스레드에서 동시에 연산을 수행하여 멀티코어 CPU를 활용합니다.

무한 스트림

무한한 시퀀스를 생성합니다. limit()을 사용해 무한 실행을 방지합니다.

Infinite stream diagram 1

Infinite stream diagram 2

Back to Blog

관련 글

더 보기 »