프로그래밍/Java

StringBuilder

개발정리 2021. 8. 21. 23:08

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