본문 바로가기
Backend/Java

[Java]StringBuilder 클래스 사용법💪

by sukii 2025. 4. 9.
반응형

✅ StringBuilder란?

: Java에서 문자열을 효율적으로 조작할 수 있도록 제공되는 클래스

String은 불변(immutable) 특성 때문에 문자열을 반복적으로 수정하면 매번 새로운 객체가 생성되어 성능이 떨어질 수 있다. 이를 보완하기 위해 StringBuilder는 내부 버퍼(buffer) 를 이용하여 문자열을 변경할 수 있게 해준다.

 

 

📊 *버퍼(buffer) 참고

버퍼는 간단히 말해 임시 저장 공간이다. StringBuilder는 문자열을 붙일 때마다 새로운 객체를 만들지 않고, 내부 버퍼에 계속 내용을 추가하면서 수정할 수 있음.

String (불변)
"H" + "e" → "He" (새 객체)
    + "l" → "Hel" (새 객체)
    + "l" → "Hell" (새 객체)
    + "o" → "Hello" (새 객체)

StringBuilder (가변, 버퍼)
[  'H', 'e', 'l', 'l', 'o', ..., ..., ... ]  ← 버퍼에 계속 추가됨

 

 

 

✅ 주요 메서드

메서드명 설명
append(String s) 문자열 추가
insert(int offset, String s) 특정 위치에 문자열 삽입
delete(int start, int end) 부분 문자열 삭제
reverse() 문자열 뒤집기
toString() 최종 문자열 반환

 

 

 

✅ 활용 예시

 

1. 문자열 뒤집기

String str = "abcde";
String reversed = new StringBuilder(str).reverse().toString();  // 출력: edcba

 

2. 반복문으로 문자열 이어붙이기

StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
    sb.append(i);
}
System.out.println(sb.toString());  // 출력: 12345

 

3. 문자열 배열 이어붙이기

String[] arr = {"apple", "banana", "cherry"};
StringBuilder sb = new StringBuilder();
for (String s : arr) {
    sb.append(s).append(" ");
}
System.out.println(sb.toString().trim());  // 출력: apple banana cherry

 

 

 

✅ String / StringBuilder / StringBuffer 비교

클래스  불변성  안전성  속도  사용 시점
String ✅ 불변 ✅ 안전 ❌ 느림 값이 바뀌지 않는 문자열, 간단한 처리
StringBuilder ❌ 가변 ❌ 비안전 ✅ 빠름 단일 쓰레드에서 문자열을 많이 조작할 때
StringBuffer ❌ 가변 ✅ 안전 ⏸ 중간 멀티스레드 환경에서 문자열 조작이 필요한 경우

 

*StringBuffer는 StringBuilder와 거의 동일한 기능을 제공하지만, 모든 메서드에 synchronized 키워드가 붙어 있어 스레드에 안전함.

But, 그만큼 성능이 느릴 수 있으므로 멀티스레드 환경에서만 사용하는 것이 좋음

 

◾ 예시 사용 상황

사용 상황 추천 클래스  이유
문자열을 반복해서 누적하거나 편집해야 할 때 StringBuilder 성능 좋고 메모리 효율적
문자열이 자주 바뀌지 않고, 간단하게 다룰 때 String 코드가 더 직관적이고 간결함
한 번 생성한 문자열을 계속 참조하거나 비교할 때 String 불변성으로 인해 안정적이며 예측 가능
여러 스레드가 동시에 접근하는 환경 StringBuffer StringBuilder는 스레드 안전하지 않음

 

 

*문자열이 자주 바뀌고 덧붙이거나 수정해야 한다면 StringBuilder 사용을 고려하고, 그렇지 않고 간단하게 다룰 수 있으면 String으로도 충분

 

 

 

반응형