로그 수만 줄을 하나의 문자열로 합치는 작업을 하는데, 줄 수가 늘어날수록 시간이 제곱으로 늘어나는 느낌이에요. 만 줄일 때는 순식간인데 십만 줄 넘어가니까 체감이 확 달라집니다.
코드는 대충 이래요.
String s = "";
for (String chunk : list) {
s += chunk;
}
제 생각엔 자바 String이 불변이라 s += chunk 할 때마다 새 문자열을 통째로 만들면서 앞에 있던 걸 전부 다시 복사하는 것 같은데, 그러면 전체가 O(n제곱)이 되는 게 맞나요?
StringBuilder 쓰라는 얘기는 많이 봤는데, 그게 왜 더 빠른지 원리를 정확히 알고 쓰고 싶어서요. append가 매번 복사를 안 하는 구조인 건지, 내부적으로 뭐가 다른 건지 설명해 주실 분 계실까요. 실무에서 이런 실수 안 하려면 어떤 기준으로 판단하면 되는지도 궁금합니다.