- primitive type 에서는 for문이 압도적으로 빠름
- wrapped type에서는 ex(ArrayList) 위의 글 예시를 기준으로 15배에서 1.27배로 차이가 줄음
- 아주 비싼 계산 비용이 필요한 연산에서는 큰 차이가 나지 않았음
- why? 함수 계산 비용이 순회 비용을 압도하기 때문
- 함수 내부의 시간 복잡도가 충분히 크다면 stream이 속도 손실을 가져가지 않음
- 순차스트림
- 하나의 쓰레드에서 모든 반복을 수행하는 것
- 싱글 스레드를 사용하기 때문에 CPU 코어 자원을 마음껏 활용하지 못하는 대신 공유 자원 이슈를 고민할 필요가 없음
- 병렬 스트림
- 여러 개의 쓰레드에서 반복을 나누어 수행하는것
- 멀티 쓰레드이므로 공유 자원 동기화 문제가 발생
- 스트림에서는 .parallel()을 붙여서 선언 가능
- 병렬 스트림이 의미가 있으려면 데이터가 충분히 커야함
결론
- 스트림 사용이 for-loop보다 의미가 있으려면
- Collection이 되는 스트림 소스의 크기가 충분히 크거나
- 컴퓨팅 연산이 CPU-intensive할 정도로 비용이 매우 싸야함
- 병렬 스트림을 사용하려면 스트림 소스인 Collection은 split하기 쉬운 자료구조여야하고
웬만해선 stateful하지 않아야 함
- 개발자간의 매끄러운 협업을 위해 가독성이 중요
- 이 점에 대해서는 스트림 사용을 적극 환영
- 코드의 유지보수가 용이하다는 점에서 중요하다고 봄
- 속도와 비슷하게 유지보수 비용은 중요한 문제
- 극단의 성능을 요구하는 특이 상황이 아니라면 적극 고려해볼만 함
'데브코스TIL' 카테고리의 다른 글
[TIL] equals 활용 시 NPE 회피 잔머리 (0) | 2024.08.02 |
---|---|
[TIL] 데일리 스크럼 (0) | 2024.07.28 |
[TIL] 변수 메서드 힌트 제공 & try-with-resources (0) | 2024.07.27 |
[TIL] 객체의 개수 (0) | 2024.07.26 |
[TIL] Arrays.copyOf / System.arraycopy() (0) | 2024.07.24 |