안녕하세요!! 1일 1개발지식을 올려보려고 합니다!
나눌 수록 좋잖아요 ㅎㅎㅎ 아시는 내용도 있으실 수도 있고 너무 쉬운 내용도 있을 수 있지만
복습겸 생각해보는 시간을 같이 가져봐요!
구독하면 편하게 보실 수 있습니다!

StringBuilder vs StringBuffer의 차이 아시나요?
1. StringBuilder 와 StringBuffer 의 차이점은?
2. 1의 대한 답변을 생각하여 아래의 코드 결과는 어떻게 될 지 알려주세요.
그리고 StringBuilder 를 StringBuffer 로 바꿨을 때 결과 값은??
public class ThreadTest {
static StringBuilder builder = new StringBuilder();
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) builder.append("A");
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) builder.append("B");
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(builder.length());
}
}
🔍 StringBuilder와 StringBuffer의 차이점
둘 다 가변적인 문자열을 다루는 클래스지만 차이가 있습니다.
🏃 StringBuilder
- 속도: 빠름 ⚡
- 스레드 안전성: ❌ (Thread-Safe 하지 않음)
- 특징: 단일 스레드 환경에서 최고의 성능

🛡️ StringBuffer
- 속도: 상대적으로 느림 🐢
- 스레드 안전성: ✅ (Thread-Safe!)
- 특징: 내부 메서드에 synchronized 키워드가 붙어있어요

결과 분석하기
StringBuilder를 사용했을 때
예시 실행 결과: 1823 (또는 1956, 1789... 매번 다름!)
2000이 운이 좋게 나올 수도 있지만 보통 2000이 안나올거에요! 😱
실행할 때마다 결과가 달라지게 됩니다.
두 스레드가 동시에 StringBuilder에 접근하면서 "경쟁 상태(Race Condition)" 가 발생한 거예요.
예를 들어:
- Thread 1: "현재 위치 100번째야, 여기에 A 추가할게!"
- Thread 2: "어? 나도 100번째 보고 있는데, 여기에 B 추가!"
- 결과: 둘 다 100번째에 추가 → 하나는 덮어써짐
StringBuffer로 바꿨을 때
static StringBuffer buffer = new StringBuffer(); // StringBuilder → StringBuffer
실행 결과는 항상 2000이 나옵니다.
StringBuffer는 synchronized 키워드 덕분에 한 번에 하나의 스레드만 접근할 수 있습니다.
언제 뭘 써야 할까?
StringBuilder를 쓰면 좋은 경우
- 단일 스레드 환경
- 메서드 내부에서만 사용하는 지역 변수
- 성능이 중요한 대용량 문자열 처리
StringBuffer를 쓰면 좋은 경우
- 멀티스레드 환경
- 여러 스레드가 공유하는 전역 변수
- 안정성이 최우선인 경우
'✨ 1일 1개발지식' 카테고리의 다른 글
| [비전공자 전공자 되기 Part 4] 💻 개발자라면 알아야 할 운영체제 핵심 개념 정리(커널과 OS..등) (1) | 2026.03.23 |
|---|---|
| [비전공자 전공자 되기 Part 3] 💻 컴퓨터는 어떻게 계산할까? — 디지털 회로부터 메모리 관리까지 (0) | 2026.03.22 |
| [비전공자 전공자 되기 Part 2] 💻 컴퓨터는 어떻게 데이터를 이해할까? — 비트(bit)부터 이미지까지 (1) | 2026.03.16 |
| [비전공자 전공자 되기 Part 1] 🌐 웹은 어떻게 지금의 모습이 되었을까? : 전체적인 구조와 흐름 (2) | 2026.03.12 |
| ☕ JVM, JRE, JDK의 차이점은? (0) | 2025.12.20 |