쉽게 쉽게

[Java] StringBuilder와 StringBuffer 차이점과 사용법 본문

Java/Java

[Java] StringBuilder와 StringBuffer 차이점과 사용법

곱마2 2026. 1. 16. 16:21
반응형

▤ 목차

    1. StringBuilder와 StringBuffer이란?

    자바에서 문자열을 다루는 자료형 클래스는 String, StringBuffer, StringBuilder 라는 3가지 자료형이 존재한다.

    그러나 StringBuffer, StringBuilder는 Stirng과는 다른 차이점이 있다.

    String은 한 번 생성되면 값을 바꿀 수 없는 불변(Immutable) 클래스이지만, 반면, StringBuilder와 StringBuffer는 값을 자유롭게 바꿀 수 있는 가변(Mutable) 클래스이다.

    1. 왜 사용하는가? (String vs 가변 클래스)

    일반 String에 + 연산을 사용하여 문자열을 더하면, 기존 값이 바뀌는 것이 아니라 새로운 String 객체가 메모리에 계속 생성된다.

    문자열을 많이 결합할수록 공간의 낭비뿐만 아니라 속도 또한 매우 느려지게 된다는 단점이 있다.

    • String: 값이 바뀔 때마다 새로운 객체 생성 (메모리 낭비 발생 가능)
    • StringBuilder/StringBuffer: 동일한 객체 내에서 문자열을 변경 (메모리 효율적, 속도 빠름)

    따라서 문자열의 추가, 수정, 삭제가 빈번하게 발생할 경우 String 클래스가 아닌 StringBuffer와 StringBuilder를 사용하는 것이 좋다.

    2. StringBuilder와 StringBuffer의 차이점

    StringBuilder와 StringBuffer의 사용법은 100% 동일하다.

    유일한 차이점은 멀티쓰레드 환경에서 안전한가(Thread-safe)이다.

    아래는 StringBuilder와 StringBuffer를 간단히 비교한 표이다.

    특징 StringBuilder StringBuffer
    동기화 (Synchronization) 지원 안 함 지원 함
    쓰레드 안전 (Thread-safe) 불안전 안전
    속도 (Performance) 매우 빠름 (단일 쓰레드 최적화) 상대적으로 느림
    사용 권장 상황 일반적인 대부분의 상황 멀티쓰레드 공유 자원인 경우

    두 클래스의 소스코드를 열어보면 거의 모든 메서드가 동일하지만, StringBuffer에는 메서드 앞에 synchronized가 붙어 있다.

    // StringBuilder
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }
    
    // StringBuffer
    public synchronized StringBuffer append(String str) {
        super.append(str);
        return this;
    }
    • StringBuffer (Thread-Safe):
      여러 개의 쓰레드가 하나의 StringBuffer 객체에 접근해서 문자열을 수정하려고 할 때, 한 쓰레드가 작업을 마칠 때까지 다른 쓰레드는 기다리게 만든다.
      데이터의 일관성을 보장한다.
    • StringBuilder (Not Thread-Safe):
      여러 쓰레드가 동시에 접근하면 데이터가 꼬일 수 있다.
      하지만 단일 쓰레드 경우에는 성능이 훨씬 좋다.

    즉 여러 쓰레드가 같이 작업한다면 StringBuffer를 선택하는 것이 안전하다.

    2. StringBuilder와 StringBuffer 사용법

    1. StringBuilder와 StringBuffer 사용법

     StringBuffer도 사용법은 동일하다.

    public class StringBuilderExample {
        public static void main(String[] args) {
            StringBuilder sb = new StringBuilder("Hello");
    
            // 1. 문자열 추가 (append)
            sb.append(" World"); // "Hello World"
            sb.append("!");       // "Hello World!"
    
            // 2. 특정 위치에 삽입 (insert)
            sb.insert(6, "Java "); // "Hello Java World!" (6번 인덱스에 삽입)
    
            // 3. 특정 범위 삭제 (delete)
            sb.delete(11, 16); // "Hello Java !" (11번부터 15번까지 삭제)
    
            // 4. 특정 위치 문자 수정 (setCharAt)
            sb.setCharAt(0, 'h'); // "hello Java !"
    
            // 5. 문자열 뒤집기 (reverse)
            sb.reverse(); // "! avaJ olleh"
    
            // 6. 최종 String 객체로 변환
            String result = sb.toString();
            System.out.println(result);
        }
    }

    https://inpa.tistory.com/entry/JAVA-%E2%98%95-String-StringBuffer-StringBuilder-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90#stringbuffer_/_stringbuilder_%ED%81%B4%EB%9E%98%EC%8A%A4

     

    ☕ 자바 String / StringBuffer / StringBuilder 차이점 & 성능 비교

    자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다. 위 3가지 클래스 자료형은 모두 문자열을 다루는데 있어 공통적으로 사용되

    inpa.tistory.com

    잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.

     

    반응형