자바 중급 문법 – 스트림 API – 1 – 중간 연산과 최종 연산

자바 중급 문법 - 스트림 API - 1 - 중간 연산과 최종 연산
자바 중급 문법 – 스트림 API – 1 – 중간 연산과 최종 연산

자바 중급 문법 – 스트림 API – 1 – 중간 연산과 최종 연산

안녕하세요! 오늘은 자바 중급 문법 중 하나인 “스트림 API”에 대해 알아보겠습니다. 스트림 API는 자바 8부터 도입된 기능으로, 컬렉션 데이터를 다루는 간편하고 효율적인 방법을 제공합니다. 스트림은 데이터의 흐름을 나타내며, 중간 연산과 최종 연산으로 구성되어 있습니다. 이 두 가지 연산에 대해 자세히 알아보도록 하겠습니다.

중간 연산 (Intermediate Operations)

스트림의 중간 연산은 데이터를 가공하고 변환하는 단계입니다. 중간 연산은 필터링, 매핑, 정렬 등 다양한 작업을 수행할 수 있습니다. 예를 들어, 특정 조건을 만족하는 요소만 걸러내거나 요소의 값을 변환하는 등의 작업이 중간 연산에 해당합니다.

한 가지 비유를 들어보겠습니다. 중간 연산은 요리를 준비하는 과정과 비슷합니다. 재료를 손질하고 자르는 것부터 시작하여 각종 조리 작업을 거치는 것이죠. 마치 레시피에 따라 재료를 가공하는 것처럼, 중간 연산도 스트림의 요소를 가공하여 새로운 스트림을 생성합니다.

자, 이제 중간 연산의 예시를 살펴보겠습니다. 예를 들어, 다음과 같은 정수 리스트가 있다고 가정해봅시다.

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

이 리스트에서 짝수만 걸러내는 중간 연산을 수행해보겠습니다. 다음과 같이 코드를 작성할 수 있습니다.

List<Integer> evenNumbers = numbers.stream()
                                   .filter(num -> num % 2 == 0)
                                   .collect(Collectors.toList());

위의 코드에서 filter 메서드는 중간 연산에 해당하며, 주어진 조건에 맞는 요소만 걸러냅니다. 여기서는 num % 2 == 0 조건으로 짝수만을 걸러내고 있습니다. 이렇게 걸러진 짝수들은 collect 메서드를 통해 리스트로 수집됩니다.

최종 연산 (Terminal Operations)

중간 연산이 스트림의 요소를 가공하여 새로운 스트림을 생성한다면, 최종 연산은 스트림에서 최종 결과를 도출하는 단계입니다. 최종 연산은 스트림의 모든 요소를 소모하며, 스트림을 닫는 역할을 합니다.

한 가지 비유를 더 들어보겠습니다. 최종 연산은 음식을 완성하여 식사하는 단계와 유사합니다. 중간 연산을 거쳐 가공된 재료들을 최종적으로 조리하여 완성된 요리를 즐기는 것처럼, 최종 연산도 스트림의 요소를 모두 소모하고 최종 결과를 얻습니다.

이제 최종 연산의 예시를 살펴보겠습니다. 위에서 사용한 evenNumbers 리스트에서 모든 요소의 합계를 구하는 최종 연산을 수행해보겠습니다. 다음과 같이 코드를 작성할 수 있습니다.

int sum = evenNumbers.stream()
                     .reduce(0, Integer::sum);

위의 코드에서 reduce 메서드는 최종 연산에 해당하며, 스트림의 모든 요소를 하나로 줄여나가는 작업을 수행합니다. 여기서는 0부터 시작하여 요소들을 차례대로 더하는 방식으로 합계를 구하고 있습니다.

주의해야 할 점

스트림 API를 사용할 때 주의해야 할 몇 가지 점을 정리해보겠습니다.

  1. 스트림은 “일회용”입니다. 한 번 사용된 스트림은 닫히게 되므로, 필요하다면 새로운 스트림을 생성해야 합니다.

  2. 중간 연산은 “게으른” 연산입니다. 중간 연산은 요소를 가공하여 새로운 스트림을 생성하지만, 실제로 연산이 수행되는 시점은 최종 연산을 만나야 합니다. 따라서 중간 연산만으로는 어떤 결과도 도출되지 않습니다.

  3. 최종 연산이 없으면 스트림은 아무런 동작도 하지 않습니다. 최종 연산이 없는 스트림 파이프라인은 단순히 스트림을 정의한 것에 불과하며, 실제로 요소를 처리하지 않습니다.

  4. 스트림 연산은 병렬 처리를 통해 성능을 향상시킬 수 있습니다. 스트림 API는 멀티스레딩을 내부적으로 처리하여 병렬 실행을 지원합니다. 따라서 큰 데이터 집합을 처리할 때는 병렬 스트림을 고려해보는 것이 좋습니다.

이상으로 “스트림 API”에 대한 중간 연산과 최종 연산에 대해 알아보았습니다. 중간 연산은 스트림의 요소를 가공하고 변환하는 작업을 수행하며, 최종 연산은 스트림에서 최종 결과를 도출하는 작업을 수행합니다. 스트림 API를 잘 활용하면 코드를 간결하고 가독성 있게 작성할 수 있으며, 병렬 처리를 통한 성능 개선도 기대할 수 있습니다.

더 많은 자바 중급 문법과 스트림 API에 관련된 내용은 블로그에서 확인해주세요! 감사합니다.

답글 남기기