StringBuilder
는 자바에서 문자열을 효율적으로 처리하기 위해 제공되는 클래스입니다. 일반적인 String
클래스와 달리, StringBuilder
는 **mutable(변경 가능)**한 객체로, 문자열을 수정하거나 추가할 때 새로운 객체를 생성하지 않고, 기존 객체를 변경하여 성능을 향상시킵니다.
StringBuilder
는 내부적으로 버퍼(buffer)를 사용해 문자열을 저장하고, 문자열을 수정할 때 새로운 객체를 생성하지 않고 기존 객체를 변경합니다. 반면에 String
은 불변(immutable)이라서 문자열을 수정할 때마다 새로운 String
객체를 생성하게 됩니다. 이 과정에서 메모리 낭비가 발생할 수 있습니다.StringBuilder
는 문자열을 빈번하게 수정(삽입, 삭제, 추가)할 경우, 성능이 뛰어납니다. 특히 반복문 안에서 문자열을 누적하거나 연결할 때 매우 유리합니다.StringBuilder
는 문자열을 더하거나 삽입, 삭제, 뒤집기 등 다양한 조작을 할 수 있는 메서드를 제공합니다. 이러한 메서드들은 모두 같은 StringBuilder
객체에서 동작하므로 추가적인 메모리 할당 없이 문자열을 쉽게 처리할 수 있습니다.append()
: 문자열을 끝에 추가합니다.
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // "Hello World"
insert()
: 특정 위치에 문자열을 삽입합니다.
StringBuilder sb = new StringBuilder("Hello");
sb.insert(5, " Java"); // "Hello Java"
delete()
: 특정 위치의 문자열을 삭제합니다.
StringBuilder sb = new StringBuilder("Hello World");
sb.delete(5, 11); // "Hello"
reverse()
: 문자열을 뒤집습니다.
StringBuilder sb = new StringBuilder("Hello");
sb.reverse(); // "olleH"
toString()
: StringBuilder
객체를 String
으로 변환합니다.
StringBuilder sb = new StringBuilder("Hello");
String result = sb.toString(); // "Hello"
public class Example {
public static void main(String[] args) {
// StringBuilder 생성
StringBuilder sb = new StringBuilder("Hello");
// 문자열 추가
sb.append(" World");
System.out.println(sb.toString()); // 출력: Hello World
// 문자열 삽입
sb.insert(5, " Java");
System.out.println(sb.toString()); // 출력: Hello Java World
// 문자열 삭제
sb.delete(5, 10);
System.out.println(sb.toString()); // 출력: Hello World
// 문자열 뒤집기
sb.reverse();
System.out.println(sb.toString()); // 출력: dlroW olleH
}
}
StringBuilder
와 StringBuffer
의 차이:StringBuilder
: 쓰레드 안전성이 보장되지 않습니다. 즉, 여러 쓰레드에서 동시에 사용될 때 문제가 발생할 수 있지만, 단일 쓰레드 환경에서는 더 빠르게 동작합니다.StringBuffer
: 쓰레드 안전성이 보장됩니다. 동기화된 메서드를 제공하여 멀티쓰레드 환경에서 안전하게 사용할 수 있지만, 동기화로 인해 성능은 StringBuilder
보다 느립니다.StringBuilder
는 문자열을 자주 수정해야 하는 경우, 특히 성능이 중요한 상황에서 String
대신 사용하는 것이 좋습니다. 단일 쓰레드 환경에서는 StringBuffer
보다 더 빠르게 동작합니다.