개발/Java

StringBuilder, StringBuffer

하프킴 2021. 5. 18. 16:36
728x90

 

String과 StringBuffer/StringBuilder의 차이점은 String은 immutable 하다는 점이다.

즉 새로운 문자열을 할당하면, 그 전의 객체를 삭제한다.

 

String은 불변성을 가져 변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용하면 좋은 성능 기대할 수 있음.

하지만 문자열 추가, 수정,삭제가 빈번하게 일어나면 mutable하게 할당하는게 유리할 수 있다.

 

StringBuffer/StringBuilder는 가변성 가지기 때문에, .append(), .delete() 등의 API를 이용하여 동일 객체내에서 문자열 변경이 가능함.

 

 

 

 

StringBuilder

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, Comparable<StringBuilder>, CharSequence

뮤터블한 문자열이다. StringBuffer와 API가 호환되지만, 동기화를 보장하지 않는다.

 A mutable sequence of characters.  This class provides an API compatible
 * with {@code StringBuffer}, but with no guarantee of synchronization.
 * This class is designed for use as a drop-in replacement for
 * {@code StringBuffer} in places where the string buffer was being
 * used by a single thread (as is generally the case).   Where possible,
 * it is recommended that this class be used in preference to
 * {@code StringBuffer} as it will be faster under most implementations.

 

StringBuffer

 

 public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, Comparable<StringBuffer>, CharSequence

스레드 세이프하고, 뮤터블한 문자열이다.

 * A thread-safe, mutable sequence of characters.
 * A string buffer is like a {@link String}, but can be modified. At any
 * point in time it contains some particular sequence of characters, but
 * the length and content of the sequence can be changed through certain
 * method calls.

스레드 세이프를 보장하기 위해 synchronized를 통해 메서드를 선언함.

    @Override
    public synchronized int length() {
        return count;
    }