개발 저장소/Java Inventory

Java 8 Stream vs For

Diger 2022. 4. 30. 18:27
728x90

Java 8 문법을 공부하다, Stream을 배운 후 정말 편리한 기능이구나 라는걸 느끼면서

 

근데 성능은 어떻게 되려나...? 하는 궁금증이 생겨 찾은 내용을 정리했다.

 

우선 결론부터 말하자면 Stream은 알고리즘 문제를 풀거나 시간효율적인 측면에서 중요한 곳에서는 안쓰는게 맞는 것 같다

 

For-loop(반복문)을 이용한 배열 접근 후 최댓값 도출

int[] a = ints;

int e = ints.length;

int m = Integer.MIN_VALUE;

for(int i=0; i < e; i++)
  if(a[i] > m) m = a[i];

 

Stream을 이용한 배열 접근 후 최댓값 도출

int m = Arrays.stream(ints)
         .reduce(Integer.MIN_VALUE, Math::max);

 

두 코드를 동작시킨 환경에서의 성능차이는 다음과 같다.

int-array, for-loop : 0.36 ms
 
int-array, seq. stream: 5.35 ms
 
 
단편적인 예시이긴 하지만 일반 배열이아닌 ArrayList에서도 반복문이 더 우세한 결과를 가지고 있었다.
 
 
 

성능 테스트 1

https://jaxenter.com/java-performance-tutorial-how-fast-are-the-java-8-streams-118830.html

 

Java performance tutorial – How fast are the Java 8 streams? - JAXenter

JAX London speaker Angelika Langer asks the most important question for anyone using Java 8 streams: are they really faster?

jaxenter.com

 

https://jeong-pro.tistory.com/185

 

Stream foreach 성능 테스트 (stream을 사용하지 말아야할 때는 언제일까로 시작된 간단한 테스트)

Stream foreach 반복문 테스트 자바 Stream을 이용한지 꽤 됐다. 필자가 개인적으로 Stream을 사용하는 이유는 가독성이 좋아지기 때문이다. (가장 큰 이유) 예전에 Stream이 막 등장했을 시기에는 Stream이

jeong-pro.tistory.com

성능 테스트 2

위 블로그에서 실험한 결과를 토대로 하면

 

분명 Stream이 더 빠른경우가 있긴하다. 하지만 일반적으로는 For-loop이 빠른 것은 이 실험에서도 드러났다.

 

 

https://pamyferret.tistory.com/49

 

for문 보다 Stream API가 느리지만 사용하는 이유

https://pamyferret.tistory.com/43 Java 8부터 지원되는 Stream API 스트림(Stream)이란? FileInputStream과 같은 I/O 스트림과는 다른 개념이다. (I/O 스트림은 데이터 가져오기와 내보내기를 하는 일종의 통로..

pamyferret.tistory.com

 

또한 위 블로그에 따르면

For-loop이 더 빠른 이유를 설명해놓았는데

 

1. for문은 단순 인덱스 기반이다.

for문은 단순 인덱스 기반으로 도는 반복문으로 메모리 접근이기 때문에 Stream에 비해 빠르고 오버헤드도 없다.

stream의 경우는 JVM이 이것저것 처리해줘야하는 것들이 많아 실행 시 느릴 수 밖에 없다.

 

2. for문은 컴파일러가 최적화를 시킨다.

stream은 java 8부터 지원한 것이고 for문은 그보다 훨씬 오래전부터 계속 사용해왔다.

그만큼 사용되는 컴파일러는 오래 사용된 for문에 대한 처리가 되어 있어 for문의 경우 미리 최적화를 시킬 수 있지만,

stream의 경우 신생(?)인 만큼 정보가 없어 for문과 같은 정교한 최적화를 수행할 수 없다.

 

위 두가지 이유가 For-loop이 더 성능이 좋은 설득력이 높은 근거라고 생각한다.

 

무조건적으로 쓰지 말아야하는건 절대 아니라고 생각하고, 이에 대한 효율적인 쓰임새는 역시 짬바에서 나오지 않을까... 싶은 생각과 함께 나름대로 결론을 정리했다.

728x90