[java] 스트림 API를 사용한 데이터 처리의 효율성 비교

Java 8에서 도입된 스트림 API는 데이터 처리를 간편하게 할 수 있는 많은 기능을 제공합니다. 스트림 API를 사용하면 컬렉션 데이터를 처리하는 과정을 더 간결하게 표현할 수 있으며, 병렬 처리를 통해 더 빠른 속도로 데이터를 처리할 수도 있습니다.

이번 글에서는 스트림 API를 사용한 데이터 처리의 효율성을 비교해보려고 합니다. 예제 코드를 통해 스트림 API의 효율성을 확인하고, 일반적인 반복문과의 비교를 통해 차이를 알아보도록 하겠습니다.

예제 코드

먼저, 스트림 API를 사용한 데이터 처리의 예제 코드를 살펴보겠습니다. 아래의 코드는 정수 리스트에서 짝수만 필터링하여 새로운 리스트를 생성하는 예제입니다.

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);

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

        System.out.println(evenNumbers);
    }
}

위의 코드에서는 numbers 리스트를 스트림으로 변환한 뒤, filter 메소드를 사용하여 짝수만을 필터링하고, collect 메소드를 사용하여 새로운 리스트로 변환하고 있습니다. 즉, 스트림 API를 사용하면 데이터 처리 과정을 체인 형태로 표현할 수 있고, 각 처리 단계를 메소드로 표현할 수 있다는 장점이 있습니다.

성능 비교

해당 예제 코드를 기반으로 일반적인 반복문을 사용한 데이터 처리와 스트림 API를 사용한 데이터 처리의 성능을 비교해보겠습니다. 아래의 예제 코드는 위의 스트림 API를 사용한 코드와 동일한 작업을 반복문을 사용하여 처리한 예제입니다.

import java.util.ArrayList;
import java.util.List;

public class LoopExample {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);

        List<Integer> evenNumbers = new ArrayList<>();
        for (Integer number : numbers) {
            if (number % 2 == 0) {
                evenNumbers.add(number);
            }
        }

        System.out.println(evenNumbers);
    }
}

위의 코드에서는 numbers 리스트의 각 요소를 반복하면서 짝수인 경우만을 evenNumbers 리스트에 추가하고 있습니다.

위의 두 코드를 각각 실행해보면, 스트림 API를 사용한 데이터 처리에서는 간결하고 명확한 코드를 작성할 수 있다는 장점이 있지만, 일반적인 반복문을 사용한 데이터 처리에서는 성능면에서 약간 우위에 있는 것을 확인할 수 있습니다. 스트림 API는 내부적으로 반복문을 사용하며, 추가적인 연산이 필요하기 때문에 일부 상황에서는 더 많은 시간이 소요될 수 있습니다.

결론

스트림 API를 사용한 데이터 처리는 코드의 가독성과 유지보수성을 향상시킬 수 있는 장점이 있습니다. 하지만, 성능면에서는 일반적인 반복문을 사용한 데이터 처리가 더 효율적일 수 있습니다. 따라서, 데이터 처리를 할 때는 코드의 복잡도와 성능 요구사항을 고려하여 적절한 방법을 선택하는 것이 중요합니다.

참고 자료