본문 바로가기
Java/Java이론

자바 스트림(Stream)

by P_eli 2023. 11. 7.
728x90
반응형

자바 8부터 도입된 스트림(Stream)은 데이터 처리를 보다 간결하고 효율적으로 수행할 수 있도록 도와주는 강력한 도구입니다. 스트림은 컬렉션, 배열, I/O 자원 등 다양한 데이터 소스로부터 데이터를 추출하고 처리하는 데 사용됩니다. 이번 글에서는 자바 스트림의 기본 개념과 활용 방법을 알아보겠습니다.

스트림이란?

스트림은 데이터 요소의 연속된 순서화된 집합을 나타냅니다. 스트림은 한 번만 소비할 수 있는 데이터 소스를 표현하며, 데이터를 처리하기 위한 다양한 연산을 지원합니다. 스트림은 데이터베이스 질의와 유사한 방식으로 데이터를 처리할 수 있으며, 코드를 더 간결하고 가독성 좋게 만들어줍니다.

스트림의 특징

  1. 데이터 소스로부터 추출: 스트림은 컬렉션, 배열, 파일, 람다 표현식, 숫자 범위 등 다양한 데이터 소스로부터 데이터를 추출할 수 있습니다.
  2. 중간 연산과 최종 연산: 스트림은 중간 연산과 최종 연산으로 구분됩니다. 중간 연산은 스트림을 변환하거나 필터링하는 작업을 수행하며, 최종 연산은 결과를 생성하거나 출력하는 작업을 수행합니다.
  3. 게으른 연산: 스트림 연산은 게으르게(Lazy) 수행됩니다. 이는 연산이 요청되기 전까지 실제로 수행되지 않음을 의미하며, 필요한 경우에만 연산이 수행됩니다.
  4. 병렬 처리 지원: 스트림은 병렬 처리를 지원하므로 멀티코어 CPU에서 성능을 극대화할 수 있습니다.

기본적인 스트림 사용법

스트림을 사용하려면 다음과 같은 기본적인 단계를 따릅니다:

  1. 스트림 생성: 데이터 소스로부터 스트림을 생성합니다.
  2. 중간 연산 수행: 중간 연산을 사용하여 스트림을 필터링하거나 변환합니다.
  3. 최종 연산 수행: 최종 연산을 사용하여 스트림의 결과를 생성하거나 출력합니다.

아래는 간단한 예제 코드를 통해 스트림의 기본 사용법을 보여줍니다.

List<String> words = Arrays.asList("Hello", "World", "Stream", "Example");

// 스트림 생성
Stream<String> stream = words.stream();

// 중간 연산: 길이가 5 이상인 단어 필터링
Stream<String> filteredStream = stream.filter(word -> word.length() >= 5);

// 최종 연산: 필터링된 결과 출력
filteredStream.forEach(System.out::println);

 

이 코드에서는 문자열 리스트에서 길이가 5 이상인 단어를 필터링하고 출력하는 스트림 예제를 보여줍니다.

 

아래는 스트림 실제코드 사용법 알아봅시다.

 

스트림의 중간 연산과 최종 연산

스트림은 중간 연산과 최종 연산으로 구성됩니다. 중간 연산은 스트림을 변환하고 필터링하는 작업을 수행하며, 최종 연산은 실제로 결과를 생성하거나 출력하는 작업을 수행합니다.

 

중간 연산과 최종 연산의 예시

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 중간 연산: 짝수만 선택
Stream<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0);

// 중간 연산: 제곱
Stream<Integer> squaredNumbers = evenNumbers.map(n -> n * n);

// 최종 연산: 결과 출력
squaredNumbers.forEach(System.out::println);

 

이 예제에서는 스트림의 중간 연산을 사용하여 짝수를 선택하고, 그 후에 제곱을 계산한 다음 최종 연산으로 결과를 출력하는 방법을 보여줍니다.

 

 

 스트림의 병렬 처리

스트림은 병렬 처리를 지원하며, 이를 통해 다중 코어를 활용하여 데이터 처리를 가속화할 수 있습니다.

 

병렬 스트림 사용 예제

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// 병렬 스트림 생성
Stream<Integer> parallelStream = numbers.parallelStream();

// 중간 연산 및 최종 연산
int sum = parallelStream
    .filter(n -> n % 2 == 0)
    .mapToInt(Integer::intValue)
    .sum();

System.out.println("짝수의 합: " + sum);

 

이 코드에서는 병렬 스트림을 사용하여 짝수를 필터링하고 합계를 계산하는 방법을 보여줍니다.

728x90
반응형

'Java > Java이론' 카테고리의 다른 글

쓰레드(Thread)  (1) 2023.11.21
자바 입출력 스트림(Java I/O Streams)  (0) 2023.11.10
자바 람다식  (0) 2023.11.06
자바 컬렉션  (0) 2023.11.05
제네릭  (0) 2023.11.04