| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래머스
- 멀티태스킹
- StringBuilder
- CPU
- 오버로딩
- 멀티프로세싱
- 쿠키
- LocalDate
- localtime
- 자바의 정석
- 입출력
- StringBuffer
- 리눅스
- 티스토리챌린지
- 캡슐화
- 둘만의 암호 자바
- SQL Mapper
- 다형성
- hackerrank
- 혼공얄코
- over()
- 둘만의 암호
- 오버라이딩
- 백트래킹
- spring security
- 프로그래머스 둘만의 암호
- spring security 설정
- 오블완
- 자바의정석
- java
- Today
- Total
쉽게 쉽게
[Java] StringBuilder와 StringBuffer 차이점과 사용법 본문
▤ 목차
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);
}
}
☕ 자바 String / StringBuffer / StringBuilder 차이점 & 성능 비교
자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다. 위 3가지 클래스 자료형은 모두 문자열을 다루는데 있어 공통적으로 사용되
inpa.tistory.com
| 잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다. |

'Java > Java' 카테고리의 다른 글
| [Java/알고리즘] 시간복잡도 계산 (0) | 2026.01.10 |
|---|---|
| [Java/알고리즘] 비트 연산자 사용법 (1) | 2026.01.02 |
| [Java] LocalTime , LocalDate의 타입변환 (0) | 2025.12.17 |
| [Java] 자주 사용하는 타입(String, Int, Char) 변환 방법 (0) | 2025.12.02 |
| [Java] 배열, 컬렉션 정렬 방법 (0) | 2025.11.24 |
