1. StringBuilder 란
StringBuilder Class represents a mutable string of characters.
StringBuilder 클래스는 문자의 가변 문자열을 나타냅니다.
2. String vs StringBuilder 비교
String 의 경우 불변(immutable) 이기 때문에 문자열을 계속해서 추가할 경우 (이어 붙이는 경우) 기존의 문자열과 새로운 문자열을 합한 만큼의 새로운 크기의 문자열을 생성하고, 기존 문자열과 새로운 문자열들을 한자 한자 씩 가져다 복사하는 비효율적인 방법을 사용하고 있다.
String joinWords (String[] words) {
String sentence = "";
for (String w : words) {
sentence = sentence + w;
}
return sentence;
}
StringBuilder 를 이용하면 클래스 안에 배열 공간을 미리 만들어놓고, append 함수가 호출되면 추가되는 문자열을 해당 배열 공간에 바로 추가할 수 있기 때문에 속도, 공간 측면에서 효율적으로 처리할 수 있다.
( StringBuilder 에서의 복사는 내부적으로 생성한 배열 공간이 가득 찼을때 배열 공간을 늘려주는 작업만 진행하면 된다. )
String joinWords (String[] words) {
StringBuilder sentence = new StringBuilder();
for (String w : words) {
sentence = sentence.append(w);
}
return sentence.toString();
}
3. StringBuilder vs StringBuffer
StringBuilder
- 동기화 보장을 하지 않는다.
StringBuffer
- 동기화를 보장하기 때문에 멀티쓰레드 환경에 적합하다. (TreadSafe)
- 그렇기 때문에 Builder 보다는 속도가 느리다는 것이 단점이다.
4. Script
String 의 경우 불변이기 때문에 문자열을 계속해서 추가할 경우
기존 문자열 + 새로운 문자열을 합한 만큼의 새로운 크기의 문자열을 생성하고,
기존 문자열 + 새로운 문자열들을 한자 한자씩 가져다 복사하는 비효율 방법을 사용한다.
StringBuilder 는 클래스 안에 배열 공간을 미리 만들어두기 때문에 append 함수가 호출되면 문자열을 해당 배열공간에 바로 추가할 수 있기 때문에 속도, 공간 측면에서 효율적으로 처리할 수 있다.
마지막 toString() 으로 출력을 할 시에는 배열에서 사용하고 있는 문자까지만 자른 후에 출력을 진행한다.
그리고 많이 비교되는것이 StringBuilder 와 StringBuffer 인데, Buffer 의 경우 동기화를 지원하기 때문에 멀티쓰레드 환경에 적합한반면 속도가 느리고 Builder 의 경우에는 동기화를 지원하지 않다는 차이가 있다.
'프로그래밍 > Java' 카테고리의 다른 글
JVM 구조 (0) | 2022.04.30 |
---|---|
JDK, JRE, JVM 이해하기 (0) | 2022.04.29 |
Java 8 Funtional 스터디 (0) | 2021.09.23 |
Inner class 정리 (1) | 2021.09.10 |
Interface (0) | 2021.08.22 |