Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java StringBuffer vs StringBuilder: 핵심 차이점 총정리

StringBuffer와 StringBuilder는 모두 가변(mutable) 클래스로, 문자열 뒤집기(reverse), 문자열 연결(concat) 등 다양한 문자열 연산을 수행할 수 있습니다. String 클래스와 달리 새로운 객체를 생성하지 않고도 기존 문자열을 수정할 수 있다는 것이 큰 장점입니다.

두 클래스의 가장 큰 차이는 스레드 안전성(Thread Safety)입니다. StringBuffer는 스레드 세이프(thread-safe)한 반면, StringBuilder는 스레드 세이프하지 않습니다. 이러한 특성 때문에 StringBuilder가 StringBuffer보다 더 빠른 성능을 제공합니다. 참고로 문자열 연결에 사용하는 + 연산자도 내부적으로는 StringBuffer 또는 StringBuilder 클래스를 활용합니다.

아래 표에서 두 클래스의 주요 차이점을 한눈에 비교해 보세요.

번호구분StringBufferStringBuilder
1도입 시점자바(Java) 최초 릴리스부터 포함Java 5부터 도입
2동기화(Synchronized)동기화 지원동기화 미지원
3성능스레드 세이프하여 여러 스레드가 동시에 접근할 수 없으므로 상대적으로 느림스레드 세이프하지 않아 StringBuffer보다 빠름
4가변성(Mutable)가변. 객체를 새로 생성하지 않고 문자열 수정 가능역시 가변
5저장 위치힙(Heap)힙(Heap)

StringBuilder 사용 예제

public class StringBuilderExample{
    public static void main(String[] args){
        StringBuilder builder = new StringBuilder("Hi");
        builder.append("Java 8");
        System.out.println("StringBuilderExample" + builder);
    }
}

StringBuffer 사용 예제

public class StringBufferExample{
    public static void main(String[] args){
        StringBuffer buffer = new StringBuffer("Hi");
        buffer.append("Java 8");
        System.out.println("StringBufferExample" + buffer);
    }
}

그렇다면 어떤 것을 선택해야 할까?

선택 기준은 간단합니다. 단일 스레드 환경이라면 동기화 오버헤드가 없는 StringBuilder를 사용하는 것이 좋습니다. 반면 멀티스레드 환경에서 여러 스레드가 동시에 하나의 문자열 객체에 접근하고 수정할 가능성이 있다면 데이터 일관성을 보장하는 StringBuffer를 사용해야 합니다.

대부분의 일반적인 애플리케이션 코드에서는 문자열 객체가 여러 스레드에 공유되는 경우가 드물기 때문에, 성능상 이점이 있는 StringBuilder를 사용하는 것이 일반적인 권장 사항입니다.