StringBuilder VS StringBuffer
Java에서 문자열을 효율적으로 다루기 위한 클래스입니다.
이 클래스는 가변하며, 문자열을 추가하거나 수정하는 데에 사용됩니다.
StringBuilder의 메소드
- StringBuilder() 생성자
StringBuilder 객체를 생성합니다. 초기 용량(capacity)은 기본적으로 16이지만, 필요에 따라 자동으로 확장됩니다.
StringBuilder sb = new StringBuilder();
- append(...) 메소드
문자열, 문자, 다른 데이터 유형 등을 현재 StringBuilder에 덧붙입니다.
sb.append(" World");
- insert(...) 메소드
특정 위치에 문자열, 문자, 다른 데이터 유형 등을 삽입합니다.
sb.insert(5, "Awesome");
- delete(...) 메소드
지정된 범위의 문자를 삭제합니다.
sb.delete(5, 12);
- reverse() 메소드
문자열을 뒤집습니다.
sb.reverse();
- toString() 메소드
StringBuilder의 내용을 String으로 변환합니다.
String result = sb.toString(); // StringBuilder의 내용을 String으로 변환
StringBuilder를 사용하면 문자열을 더 효율적으로 수정할 수 있으며, 반복적인 문자열 조작 작업에서 성능 향상을 제공합니다.
👊🏻 StringBuilder VS StringBuffer
- 스레드 안전성 (Thread Safety)
- StringBuilder: StringBuilder는 스레드에 안전하지 않습니다.
따라서, StringBuilder는 단일 스레드 환경에서만 사용하는 것이 안전합니다. 동시에 여러 스레드가 StringBuilder 객체를 수정하려고 하면, 외부에서 추가적인 동기화를 제공해야 합니다.
- StringBuffer: StringBuffer는 스레드에 안전합니다.
즉, 여러 스레드에서 동시에 StringBuffer 객체를 수정해도 안전하게 작동합니다. 이는 내부적으로 메소드들에 대한 동기화를 제공하기 때문입니다.
- 성능
- StringBuilder: StringBuilder는 스레드 안전성을 제공하지 않기 때문에, 동기화 관련 오버헤드가 없습니다. 따라서 단일 스레드 환경에서 더 빠르게 동작할 수 있습니다.
- StringBuffer: StringBuffer는 동기화를 제공하기 때문에 여러 스레드가 안전하게 사용할 수 있지만, 이로 인해 성능상의 오버헤드가 발생할 수 있습니다.
- 가용성
- StringBuilder: StringBuilder는 Java 5부터 도입되었으며, 상대적으로 최근에 추가되었습니다.
- StringBuffer: StringBuffer는 Java 1.0부터 존재하며, 따라서 오래된 Java 버전에서도 사용 가능합니다.
🤔 어떤 것을 선택해야 할까요?
단일 스레드 환경에서 작업하고 성능이 중요하다면 StringBuilder를 사용하는 것이 좋습니다.
다중 스레드 환경에서 안전하게 작업해야하거나, 이에 대한 고려가 필요하다면 StringBuffer를 사용하는 것이 좋습니다.