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를 쓰면 되는게 아닌가?
당연히 지원하는 기능이 많은 만큼 성능의 차이가 있으니 '용도에 맞게' 사용하는 것이 중요하다.
반응형