ComputerScience/Java

String vs StringBuffer, StringBuilder 차이점

imachill7guy 2025. 2. 24. 18:55

📌 StringBuffer란?

StringBuffer는 Java에서 문자열을 다룰 때 사용되는 클래스로, 가변(mutable) 문자열을 처리할 수 있도록 설계된 객체입니다.

기본적으로 String 객체는 불변(immutable) 속성을 가지기 때문에, 문자열을 변경할 때마다 새로운 객체가 생성됩니다.
반면, StringBuffer는 기존 객체를 수정할 수 있어 메모리 효율이 좋고 속도가 빠릅니다.


📌 주요 특징

  1. 가변(mutable) 문자열 → String과 다르게 문자열을 직접 변경 가능
  2. 메모리 효율적 → String처럼 새로운 객체를 생성하지 않고 기존 객체를 수정
  3. 스레드 안전(thread-safe) → 멀티스레드 환경에서도 안전하게 사용 가능 (synchronized 처리)

📌 주요 메서드

메서드설명

append(String s) 문자열을 추가
insert(int index, String s) 특정 위치에 문자열 삽입
replace(int start, int end, String s) 부분 문자열 교체
delete(int start, int end) 특정 범위 문자열 삭제
deleteCharAt(int index) 특정 위치의 문자 삭제
reverse() 문자열을 뒤집음
length() 문자열 길이 반환
toString() StringBuffer를 String으로 변환

 


📌 예제 코드

public class StringBufferExample {
    public static void main(String[] args) {
        // StringBuffer 생성
        StringBuffer sb = new StringBuffer("Hello");

        // 문자열 추가 (append)
        sb.append(" World");
        System.out.println(sb); // 출력: Hello World

        // 특정 위치에 문자열 삽입 (insert)
        sb.insert(5, ",");
        System.out.println(sb); // 출력: Hello, World

        // 문자열 변경 (replace)
        sb.replace(6, 7, "-");
        System.out.println(sb); // 출력: Hello- World

        // 문자 삭제 (delete)
        sb.delete(5, 7);
        System.out.println(sb); // 출력: HelloWorld

        // 문자열 뒤집기 (reverse)
        sb.reverse();
        System.out.println(sb); // 출력: dlroWolleH

        // 최종 결과를 String으로 변환
        String result = sb.toString();
        System.out.println("최종 문자열: " + result);
    }
}

 

String vs StringBuffer 차이점

비교항목 String StringBuffer
변경 여부 불변(immutable) 가변(mutable)
메모리 사용 변경 시 새 객체 생성 → 메모리 낭비 기존 객체 수정 → 메모리 절약
속도 문자열 변경이 잦으면 느림 문자열 변경이 잦으면 빠름
멀티스레드 안전성 final이므로 안전 synchronized 적용되어 안전

📌 언제 사용할까?

  • String: 변경할 필요 없는 문자열 (ex. 불변성이 중요한 경우)
  • StringBuffer: 문자열을 자주 변경해야 할 때 (append, delete 등)
  • StringBuilder: StringBuffer와 동일하지만 스레드 안전성을 보장하지 않아서 단일 스레드 환경에서 더 빠름

📌 결론

  • 문자열을 자주 변경해야 한다면 → StringBuffer 또는 StringBuilder 사용
  • 멀티스레드 환경에서는 StringBuffer(스레드 안전)
  • 단일 스레드 환경에서는 StringBuilder(더 빠름)

📌 StringBuilder란?

StringBuilder는 Java에서 가변(mutable) 문자열을 처리할 수 있도록 설계된 클래스입니다.
StringBuffer와 거의 동일하지만, synchronized(동기화)가 적용되지 않아 더 빠릅니다.
즉, 단일 스레드 환경에서 StringBuffer보다 성능이 좋습니다.


📌 주요 특징

  1. 가변(mutable) 문자열 → 기존 문자열을 수정할 수 있음 (String은 불변)
  2. 메모리 효율적 → String처럼 새로운 객체를 생성하지 않고 기존 객체를 수정
  3. 빠른 속도 → StringBuffer보다 동기화 비용이 없어 단일 스레드 환경에서 더 빠름
  4. 멀티스레드 환경에서는 안전하지 않음 → 동기화(synchronized)가 없음

📌 주요 메서드

append(String s) 문자열을 추가
insert(int index, String s) 특정 위치에 문자열 삽입
replace(int start, int end, String s) 부분 문자열 교체
delete(int start, int end) 특정 범위 문자열 삭제
deleteCharAt(int index) 특정 위치의 문자 삭제
reverse() 문자열을 뒤집음
length() 문자열 길이 반환
toString() StringBuilder를 String으로 변환

📌 예제 코드

public class StringBuilderExample {
    public static void main(String[] args) {
        // StringBuilder 생성
        StringBuilder sb = new StringBuilder("Hello");

        // 문자열 추가 (append)
        sb.append(" World");
        System.out.println(sb); // 출력: Hello World

        // 특정 위치에 문자열 삽입 (insert)
        sb.insert(5, ",");
        System.out.println(sb); // 출력: Hello, World

        // 문자열 변경 (replace)
        sb.replace(6, 7, "-");
        System.out.println(sb); // 출력: Hello- World

        // 문자 삭제 (delete)
        sb.delete(5, 7);
        System.out.println(sb); // 출력: HelloWorld

        // 문자열 뒤집기 (reverse)
        sb.reverse();
        System.out.println(sb); // 출력: dlroWolleH

        // 최종 결과를 String으로 변환
        String result = sb.toString();
        System.out.println("최종 문자열: " + result);
    }
}

 

📌 String vs StringBuffer vs StringBuilder 차이점

비교항목 String StringBuffer StringBuilder
변경 여부 불변(immutable) 가변(mutable) 가변(mutable)
메모리 사용 변경 시 새 객체 생성 → 메모리 낭비 기존 객체 수정 → 메모리 절약 기존 객체 수정 → 메모리 절약
속도 문자열 변경이 잦으면 느림 멀티스레드 가능하지만 느림 멀티스레드 지원 없음, 가장 빠름
멀티스레드 안전성 final이므로 안전 synchronized 적용되어 안전 동기화 없음, 멀티스레드에서 안전하지 않음
사용 환경 문자열 변경이 적은 경우 멀티스레드 환경 단일 스레드 환경 (빠른 성능)

📌 언제 사용할까?

String → 문자열 변경이 거의 없고, 불변성을 유지해야 할 때
StringBuffer → 멀티스레드 환경에서 안전한 문자열 조작이 필요할 때
StringBuilder → 단일 스레드 환경에서 문자열 변경이 많을 때 (속도가 가장 빠름)


📌 결론

  • StringBuilder는 StringBuffer보다 빠르고, 멀티스레드 환경이 아니라면 더 적합한 선택
  • 멀티스레드 환경이면 StringBuffer, 단일 스레드 환경이면 StringBuilder를 사용