Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

ki-sd 님의 블로그

[2026-03-17] String 클래스의 특수성과 불변성(Immutable) 본문

JavaStudy

[2026-03-17] String 클래스의 특수성과 불변성(Immutable)

ki-sd 2026. 4. 13. 17:43

자바에서 가장 많이 사용되는 참조형 타입인 String 클래스의 내부 API와, 데이터의 안전성을 보장하는 핵심 개념인 '불변성'에 대해 학습했다.

 

1. 불변 객체(Immutable Object)로서의 String

  • String 타입으로 생성된 문자열 객체는 한 번 힙(Heap) 메모리에 할당되면 그 값을 절대 변경할 수 없다.
  • 만약 "Hello" + " World"처럼 문자열을 이어 붙이거나 수정하는 연산을 수행하면, 기존의 "Hello" 객체가 수정되는 것이 아니라 새로운 메모리 주소에 "Hello World"라는 완전히 새로운 객체가 생성된다. 기존 객체는 참조를 잃고 쓰레기 값(Garbage)이 된다.

2. 메모리 효율과 설계의 고민

  • 이러한 불변성은 멀티 쓰레드 환경에서 데이터 동기화 문제 없이 안전하게 값을 공유할 수 있다는 강력한 장점을 제공한다.
  • 하지만 반복문 내부에서 수백, 수천 번 문자열을 이어 붙이는 작업을 한다면, 매번 새로운 객체가 생성되어 심각한 메모리 낭비와 성능 저하를 유발한다. 이로 인해 빈번한 문자열 조작이 필요할 때는 내부적으로 값을 변경할 수 있는 가변(Mutable) 객체인 StringBuilder나 StringBuffer를 사용해야 한다는 최적화의 원리를 체감했다.
  • 더불어 split(), substring(), indexOf() 등 String이 제공하는 API를 분석하며 복잡한 문자열 배열을 효율적으로 가공하는 메서드 설계 훈련을 병행했다.