모든 상황에 이 방식을 적용하는 것은 비효율적일 수 있습니다. 특히 중간 결과 생성에 비용
이 많이 들 때는 더욱 그렇습니다. 예를 들어
String
타입을 생각해보세요.
4
장에서 여러분
은
String
의 불변성에 대해 배웠고,
String
수정 작업에 비용이 많이 드는 이유에 대해 알
게 되었습니다. 이러한 이유로 일반적인 처리 비용을 최소화하기 위해
StringBuilder
나
StringBuffer
와 같은 최적화된 중간 컨테이너 사용이 권장됩니다.
1
,
2
,
3
,
4
Stream
<
Integer
>
.
reduce
(...)
1
+ 두 번째 요소 =
3
3
+ 세 번째 요소 =
6
6
+ 네 번째 요소 =
10
시드 + 첫 번째 요소 =
1
0
+
1
1
+
2
3
+
3
6
+
4
10
축소
결과
그림
6-19
숫자의 불변 누적 숫자의 불변 누적
String
객체의 리스트를 불변 축소로 연결하기 위해서는 단계마다 새로운
String
을 생성해
야 합니다. 이로 인해 문자의 수가
n
일 때,
O
(
n
2
) 의 실행 시간이 필요합니다.
[예제
6
-
14
]에서는
String
연결의 불변 및 가변 버전을 비교해보겠습니다.
예제
6-14
String
요소 연결하기:
reduce
와
collect
비교
var strings
=
List
.
of
("
a
",
"
b
",
"
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month, and much more.