반응형
결론부터 말하자면 불변성과 동기화 유무이다.
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를 쓰면 되는게 아닌가?
당연히 지원하는 기능이 많은 만큼 성능의 차이가 있으니 '용도에 맞게' 사용하는 것이 중요하다.
반응형
'JAVA' 카테고리의 다른 글
JVM(Java Virtual Machine: 자바 가상 머신) (0) | 2025.03.13 |
---|---|
JVM 초기화 과정(Loading, Linking, Initialization) (0) | 2025.03.13 |
자바 POJO (Plain Old Java Object) (1) | 2025.03.11 |
자바 와일드카드(Wildcards) (2) | 2025.03.11 |
자바 제네릭(Generics) (0) | 2025.03.11 |