• [Step01]. StreamAPI 보다 for문이 더 빠르다고?

    2024. 1. 29.

    by. V_Jun

    "커리어리" 에 올라온 글을 보고 있던 중, 의외의 글이 내 눈에 들어왔다.

    "Java Stream API는 왜 for-loop보다 느릴까?"

    최근에 알고리즘 스터디와 인프런 강의를 통해 알게된 후로 부터는

    for문 보다는 StreamAPI를 통한 처리 상황이 증가했고,

     

    실무 프로젝트에서 Data Sync 미들 웨어를 개발 및 개선 하면서 적용한 사례가 있기 때문이다.

     

    현실적으로 제일 좋게 느껴졌던 부분은

    " 데이터를 손쉽게 필터링 할 수 있다 " 는 부분에 있어 큰 메리트를 느꼈고,

    "코드가 간결해진다"  이 두가지는 확실히 느낄 수 있었다.

     

    그런데..

     

    for-loop 보다 느리다니..? 

     

    그래서 직접 테스트를 진행해보았다.

    package org.example;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    public class Main {
        public static void main(String[] args) {
            int size = 1000000;
            List<Integer> list = new ArrayList<>();
    
            for (int i = 0; i < size; i++) {
                list.add(i);
            }
    
            // Stream API 사용
            long streamStartTime = System.currentTimeMillis();
            long sumStream = list.stream().mapToLong(Integer::longValue).sum();
            long streamEndTime = System.currentTimeMillis();
            System.out.println("Stream API: " + (streamEndTime - streamStartTime) + "ms, Sum: " + sumStream);
    
            // for문 사용
            long forLoopStartTime = System.currentTimeMillis();
            long sumForLoop = 0;
            for (int i : list) {
                sumForLoop += i;
            }
            long forLoopEndTime = System.currentTimeMillis();
            System.out.println("For Loop: " + (forLoopEndTime - forLoopStartTime) + "ms, Sum: " + sumForLoop);
        }
    }

     

    실행 결과
    > Task :Main.main()
    Stream API: 13ms, Sum: 499999500000
    For Loop: 6ms, Sum: 499999500000

     

    진짜 For Loop가 더 빠르다..

     

    여기서 제일 중요한 Why?

    https://sigridjin.medium.com/java-stream-api%EB%8A%94-%EC%99%9C-for-loop%EB%B3%B4%EB%8B%A4-%EB%8A%90%EB%A6%B4%EA%B9%8C-50dec4b9974b

     

    Java Stream API는 왜 for-loop보다 느릴까?

    The Korean Commentary on ‘The Performance Model of Streams in Java 8" by Angelika Langer

    sigridjin.medium.com

     

    아주 자세히 설명이 되어 있어,  해당 링크 를 꼭 들어가서 읽어보면 좋을 것 같다.

     

    아주 아주 간단한 요약을 해보자면

     

    StreamAPI는 

     

    > for문 보다 느린게 맞다.

     

    단, 복잡한 처리의 경우 for문과 속도 차이가 크게 나지 않는다.

     

    댓글