JAVA

String vs StringBuilder vs StringBuffer

icedstone 2025. 3. 12. 18:20
반응형

결론부터 말하자면 불변성동기화 유무이다.

String은 불변(immutable)의 속성을 가지고 있고

StringBuilder/StringBuffer는 가변(mutable)성을 가지고 있습니다.

StringBuffer는 동기화를 지원하기 때문에 멀티쓰레드 환경에서 안정성(Thread-safe)을 가지고 있습니다.

 

그렇다면 불변과 가변은 무엇일까?

말 그대로 변할 수 없는 읽기만 가능한걸 '불변'이라고 한다.

public void strMethod() {
  String str = "hello";
  str = str + "world";
}

public void strBuilderMethod() {
  StringBuilder sb = new StringBuilder("hello");
  sb.append("world");
}

 

위 method에서 str이 "hello"에서 "helloworld"로 바뀐 것이 아니라 str에 새로운 메모리 영역을 새로 가리키게 된 것이고, 기존에 있던 "hello"의 경우에는 GC(garbage collection)의 대상이 된다.

 

그러면 무조건 모든걸 지원하는 StringBuffer를 쓰면 되는게 아닌가?

당연히 지원하는 기능이 많은 만큼 성능의 차이가 있으니 '용도에 맞게' 사용하는 것이 중요하다.

반응형