StringBuilder
String은 문자열을 연결을 할 때마다 메모리를 새로 생성하고 삭제하는 방식이라 비효율적이지만,
StringBuilder는 가변 문자열을 다루는 클래스로, 문자열 연결 및 수정 작업에 효율적입니다.
예시 String
String str1="abc";
str1 = str1 + "defg";
str1 = str1.replace("b", "z");
먼저 문자열 "abc"를 가지는 str1 변수를 선언합니다.
str1 = str1 + "defg";
문자열 연결 연산을 사용하여 str1에 "defg"를 추가합니다.
이 작업은 문자열을 연결할 때마다 메모리를 새로 생성하고
삭제하는 비효율적인 방식입니다.
str1 = str1.replace("b", "z");
str1 문자열에서 "b"를 "z"로 대체합니다.
이 작업은 String 클래스의 메소드를 사용하므로 메모리를 생성하고 삭제하는 비효율적인 작업입니다.
StringBuilder를 사용하면 더 효율적으로 문자열을 수정할 수 있습니다.
StringBuilder sb = new StringBuilder();
String str2 = sb.append("글자를 추가한다.").toString();
System.out.println(str2);
//0글1자2를 (4추5가6)한7다.8.9
System.out.println(sb.delete(4, 6).toString());
System.out.println(sb.replace(4, 4,"수정").toString());
System.out.println(sb.replace(4, 6,"치환").toString());
System.out.println(sb.append("글자를 추가한다.").toString());
String str2 = sb.append("글자를 추가한다.").toString();: sb에 "글자를 추가한다."를 추가하고, 그 결과를 toString() 메소드를 사용하여 문자열로 변환하여 str2 변수에 저장합니다.
"글자를 추가한다."가 출력됩니다.
System.out.println(sb.delete(4, 6).toString());
sb에서 인덱스 4부터 6 직전까지의 문자열을 삭제하고, 그 결과를 문자열로 변환하여 출력합니다.
따라서 "글자를 추가한다."에서 "를 "가 삭제되어 "글자 추가한다."가 출력됩니다.
System.out.println(sb.replace(4, 4, "수정").toString());
sb에서 인덱스 4부터 4 직전까지의 문자열을 "수정"으로 대체하고, 그 결과를 문자열로 변환하여 출력합니다.
이 작업은 아무런 변경이 일어나지 않으므로 "글자 추가한다."가 출력됩니다.
System.out.println(sb.replace(4, 6, "치환").toString());
sb에서 인덱스 4부터 6 직전까지의 문자열을 "치환"으로 대체하고, 그 결과를 문자열로 변환하여 출력합니다.
따라서 "글자치환한다."가 출력됩니다.
System.out.println(sb.append("글자를 추가한다.").toString());
sb에 "글자를 추가한다."를 추가하고, 그 결과를 문자열로 변환하여 출력합니다.
이전 문자열 "글자치환한다."에 "글자를 추가한다."가 추가되어 "글자치환한다.글자를 추가한다."가 출력됩니다.
결론
StringBuilder 클래스를 활용은 문자열을 수정할 때 메모리를 새로 생성하고 삭제하는 비효율성을 줄일 수 있으므로 문자열 조작 성능을 향상시킬 수 있습니다.
'Java' 카테고리의 다른 글
[Java]프레임워크, 라이브러리, 모듈(Framework, Library, Module) (0) | 2023.10.08 |
---|---|
[Java] Generics (0) | 2023.10.03 |
[Java] String, StringBuffer, StringBuilder 차이점과 장단점 (0) | 2023.10.03 |
[Java] Wrapper class (0) | 2023.10.03 |
[Java] Math 클래스 (0) | 2023.10.03 |