자바에서 String이 불변(immutable)이라는 말을 자주 듣는데요, 솔직히 왜 굳이 이렇게 만들었는지 이해가 안 가요. 값을 못 바꾸게 하니까 오히려 불편할 때가 많던데요.
예를 들어 반복문 돌면서 문자열 이어붙이는 거 하면요.
String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}
이렇게 하면 느리다고 StringBuilder 쓰라고 하잖아요. 알고 보니 s += 할 때마다 매번 새로운 String 객체가 만들어지는 거라던데, 그럼 이게 다 불변이라서 생기는 문제 아닌가요? 그냥 처음부터 값 바꿀 수 있게 해줬으면 이런 고민도 안 했을 텐데 싶어서요.
근데 또 무슨 이유가 있으니까 이렇게 설계했을 거잖아요. 보안이나 스레드(thread) 관련해서 유리하다는 얘기도 얼핏 봤는데 그게 정확히 무슨 말인지 모르겠어요. 그리고 문자열 풀(String pool)이라는 것도 불변이랑 관련 있다던데 이 부분도 헷갈리고요. 불변이라서 얻는 이득이 뭔지, 그리고 그 불편함은 어떻게 해결하라는 건지 초보도 알아듣게 설명 좀 부탁드려요.