본문 바로가기

내일배움캠프/Today I Learned

[내배캠] 나의 스물 다섯번째 회고록

[문제]

 

정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

import java.util.Arrays;
import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] array) {
        int[] answer = new int[2];

        answer[0] = Arrays.stream(array).max().getAsInt();

        answer[1] = IntStream.range(0, array.length)
                        .filter(i -> answer[0]==(array[i]))
                        .findFirst()
                        .orElse(-1);

        return answer;
    }
}

 

알고리즘 문제를 Stream으로 풀었더니 ms초가 오래걸렸다. 

Java Stream API가 느린이유에 대해서 찾아보니

스트림은 2015년 이후에 도입되었으므로 아직 컴파일러가 최적화를 제대로 하지 못했다고 한다. 

 

그렇다고 하기엔 스트림은 코드를 간결하게 만들어주어 코드를 파악하기에 수월하다고 생각이 든다. 

그래서 스트림에 대해서 좀 더 알아보고자 스트림에 대해 공부를 해야겠다고 생각했다. 

 

스프링 과제를 제출하고 내일은 스트림에 대해서 좀 더 공부를 해볼 예정이다. 

 

 

속도도 중요한 이슈이지만, 가독성과 유지보수의 용이도 중요한 이슈이다.
상황에 따라 개발자가 어떠한 방식을 취할 것인가를 종합적으로 고려해
Stream과 for-loop 사용을 판단할 필요가 있다.
(기억하자!)

 

 

https://jypthemiracle.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

jypthemiracle.medium.com