String StringBuffer StringBuilder란 무엇인가?
String, StringBuffer, StringBuilder 모두 문자열을 저장하고 관리하는 클래스
String
String은 immutable 나머지 클래스(StringBuffer, StringBuilder)는 mutable한 특성을 가지고 있다.
최초 생성 시 메모리를 할당 받고 그 이후 메모리 공간이 변하지 않습니다. +로 문자열을 추가 연산할 경우 새로운 객체를 생성 해서 문자열을 저장하고 그 객체를 참조한다.
즉, String은 연산 작업이 많을 수록 성능이 좋지 않은 단점이 존재
다만 간단하게 사용하고 동기화에 신경쓰지 않아도 되기 때문에 내부 데이터를 자유롭게 공유 가능
StringBuffer, StringBuilder
위의 설명처럼 2개의 클래스는 mutable한 특성을 가지고 있다.
둘다 내부적으로는 AbstractStringBuilder 를 확장하고 있으며,
StringBuffer는 method override시 synchronized 키워드를 사용하여 멀티 스레드 환경에서 안전하게 사용할 수 있도록 처리하고 있습니다.
- 실제 code
// jdk 17 기준
// StringBuffer
public final class StringBuffer extends AbstractStringBuilder
implements Serializable, Comparable<StringBuffer>, CharSequence
{ ...
@Override
@IntrinsicCandidate
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
...
}
// String Builder
public final class StringBuilder extends AbstractStringBuilder
implements Serializable, Comparable<StringBuilder>, CharSequence
{ ...
@Override
@IntrinsicCandidate
public StringBuilder append(String str) {
super.append(str);
return this;
}
...
}
위에 설명한대로 StringBuffer.append() 메소드를 호출 시에는 synchronized 로 처리하고 있습니다. 멀티 스레드에 안전한만큼 성능 측면에서는 StringBuilder보다 불리합니다.
'Java' 카테고리의 다른 글
| 컬렉션 프레임워크란(Collection Framework)? (0) | 2023.06.13 |
|---|