///////
Search

StringBuffer, StringBuilder

날짜
2022/09/30
텍스트
String 은 값을 변경할 때 마다 새로운 객체를 생성하기 때문에 일반적으로 값을 변경하면 비효율적이다.
String str = "Java"; String str = "New Java";
Java
복사
위 그림처럼 String 안의 내용이 바뀌면 가리키는 주소 값이 바뀌고, 기존의 값은 메모리 영역에 남아있다. (JVM의 GC가 처리)
효율적으로 메모리를 관리하기 위해서, StringBufferStringBuilder 가 존재한다.
StringBuffer와 StringBuilder의 차이
그렇다면 동일한 API를 가지고 있는 StringBuffer, StringBuilder의 차이점은 무엇일까?
가장 큰 차이점은 동기화의 유무로써 StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다.  참고로 String 불변성을 가지기때문에 마찬가지로  멀티쓰레드 환경에서의 안정성(thread-safe)을 가지고 있습니다.
반대로 StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어납니다. 출처: https://ifuwanna.tistory.com/221

StringBuffer / StringBuilder 메서드

1. append()

문자열을 추가한다.
java.lang.StringBuilder sb = new java.lang.StringBuilder("123"); sb.append(4567); // 4567 추가
Java
복사
결과
1234567
Java
복사

2. delete()

문자열을 삭제한다
java.lang.StringBuilder sb = new java.lang.StringBuilder("123456"); sb.delete(0, 2); // 0 번째부터 2개 지움
Java
복사
결과
3456
Java
복사

3. replace()

문자열을 교체한다
java.lang.StringBuilder sb = new java.lang.StringBuilder("123456"); sb.replace(0, 3, "AB"); // 0 번째부터 3개를 "AB"로 교체함
Java
복사
결과
AB456
Java
복사

4. reverse()

문자열을 뒤집는다
java.lang.StringBuilder sb = new java.lang.StringBuilder("123456"); sb.reverse(); // 문자열 뒤집기
Java
복사
결과
654321
Java
복사

5. substring()

문자열 추출
java.lang.StringBuilder sb = new java.lang.StringBuilder("123456"); String sub = sb.substring(2, 4); // 2 부터 3(4 - 1)까지 추출 System.out.println(sub);
Java
복사
결과
34
Java
복사
추출 시 index - 1 의 값을 추출한다.
위 코드에서 substring(2, 4) 의 경우, 2번째 인덱스부터, 4 - 13번째 인덱스 까지 추출한다.
문자열
1
2
3
4
5
6
index 값
0
1
2
3 (4 - 1)
4
5

substring()을 활용한, 문자열 회전 출력 예제

import java.util.Scanner; public class StringBuilder_2 { public static void main(String[] args) { // 입력받은 문장 회전회오리 Scanner sc = new Scanner(System.in); String str = sc.nextLine(); for(int i = 0 ; i <= str.length() ; i ++) { System.out.print(str.substring(i)); System.out.println(str.substring(0 ,i)); } } }
Java
복사
결과
회전회오리 전회오리회 회오리회전 오리회전회 리회전회오 회전회오리
Java
복사