불변이라는 결론을 외웠는지가 아니라, 풀·해시·스레드 안전·보안까지 이어지는 설계 의도를 같이 보는지 가르려는 질문이다.
Java의 String은 내부 값을 바꿀 수 없는 불변 객체로 만들어졌고, concat·replace·substring 같은 연산은 늘 새로운 String 객체를 만들어 돌려준다. 이 불변성 덕에 동일한 리터럴은 문자열 상수 풀에서 공유돼 메모리가 절약되고, 멀티스레드 환경에서도 동기화 없이 안전하게 공유할 수 있다. 또 한 번 계산한 해시값을 안심하고 캐시해 둘 수 있어 HashMap 키로도 효율적이다. 단 리터럴("abc")과 new String("abc")는 객체 동일성이 다르고, intern()을 써야 풀 참조를 일치시킬 수 있다는 점은 따로 외워 둬야 한다.
반복 문자열 결합으로 GC가 튄 코드를 StringBuilder로 다듬은 경험이 있다면 불변 비용 사례로 연결할 수 있다
민감 값이 String에 남는 보안 리뷰를 받아 본 적이 있다면 불변성과 보안 이슈를 엮어 말할 수 있다
intern을 켰다 끄며 메모리·CPU 영향을 비교해 본 경험이 있다면 풀 재사용 비용 판단으로 이을 수 있다
아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.