어제 오늘 내일

[Java] StringBuilder 클래스 사용법 및 예제 본문

IT/Java

[Java] StringBuilder 클래스 사용법 및 예제

hi.anna 2025. 3. 13. 06:34

 

 

StringBuilder 클래스 사용법 및 예제

StringBuilder 클래스는 String 객체와 달리 변경 가능한(mutable) 문자열을 다룰 때 사용됩니다.

String 객체는 불변(immutable) 속성을 가지므로 문자열을 변경할 때마다 새로운 객체가 생성되지만,

StringBuilder는 기존 객체 내에서 문자열을 수정할 수 있어 성능이 향상됩니다.

 

1. StringBuilder 생성

StringBuilder sb1 = new StringBuilder(); // 빈 문자열 생성
StringBuilder sb2 = new StringBuilder("Hello"); // 초기 문자열 설정
StringBuilder sb3 = new StringBuilder(50); // 초기 용량(capacity) 설정

 

 

2. 주요 메서드

문자열 추가 (append)

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb); // Hello World

 

String 객체였다면, 문자열을 이어붙일 때 새로운 객체를 생성해야 하지만,

StringBuilder는 내부적으로 값이 수정됩니다.

 

문자열 삽입 (insert)

StringBuilder sb = new StringBuilder("Hello");
sb.insert(5, " Java");
System.out.println(sb); // Hello Java

 

특정 위치에 문자열을 삽입할 수 있습니다.

 

문자열 삭제 (delete, deleteCharAt)

StringBuilder sb = new StringBuilder("Hello World");
sb.delete(5, 11); // " World" 삭제
System.out.println(sb); // Hello

sb.deleteCharAt(0); // 첫 번째 문자 'H' 삭제
System.out.println(sb); // ello

 

delete(start, end)는 범위를 지정해 삭제하고,

deleteCharAt(index)는 특정 문자 하나만 삭제합니다.

 

문자열 변경 (replace)

StringBuilder sb = new StringBuilder("Hello World");
sb.replace(6, 11, "Java");
System.out.println(sb); // Hello Java

 

replace()를 활용하여, 특정 범위의 문자열을 다른 문자열로 교체할 수 있습니다.

 

문자열 뒤집기 (reverse)

StringBuilder sb = new StringBuilder("abcd");
sb.reverse();
System.out.println(sb); // dcba

 

String은 불변 객체이므로 reverse() 기능이 없습니다.

StringBuilder의 reverse() 메서드를 이용하면, 문자열을 쉽게 뒤집을 수 있습니다.

 

문자 추출 (charAt, substring)

StringBuilder sb = new StringBuilder("Hello");
char ch = sb.charAt(1); // 'e'
System.out.println(ch);

String sub = sb.substring(1, 4); // "ell"
System.out.println(sub);

 

charAt(index)는 특정 인덱스의 문자를 반환합니다.

substring(start, end)는 특정 범위의 문자열을 반환합니다.

 

문자열 길이 확인 (length) 및 용량 관리 (capacity, ensureCapacity)

StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb.length()); // 5
System.out.println(sb.capacity()); // 기본 용량(16) + "Hello"의 길이

sb.ensureCapacity(50); // 최소 50의 용량을 가지도록 설정
System.out.println(sb.capacity()); // 변경된 용량 출력

 

capacity()는 현재 할당된 메모리 크기를 반환합니다.

ensureCapacity()는 최소 용량을 확보하도록 합니다.

 

3. String과 StringBuilder 비교

String str = "Hello";
str += " World"; // 새로운 객체 생성 (메모리 낭비)

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 기존 객체에서 수정 (효율적)

 

문자열을 자주 변경해야 한다면 StringBuilder가 성능 면에서 유리합니다.

 

 

결론

  • 문자열을 자주 변경해야 한다면 StringBuilder를 사용하면 성능이 크게 향상됨.
  • 멀티스레드 환경에서는 StringBuffer(동기화 지원)를 고려.
  • 문자열이 변경되지 않는다면 String을 사용하는 것이 더 적절.

 

 

반응형
Comments