본문 바로가기
알고리즘

StringBuilder, StringBuffer

by 고유빙글 2022. 1. 11.

 이는 String의 특성을 먼저 보는 것이 좋다.

 다들 알다시피

 

String str1 = "가나다";
String str2 = "라마바";

str1 += str2;
System.out.println(str1);

 를 한다면, 출력되는 문자열은 가나다라마바 일 것이다.

 

 이때 String타입은 불변성을 갖기 때문에, 원래 str1이 갖고있던 "가나다"에 문자열이 추가되는 것이 아니라,

 "가다나"는 GC ( garbage collector )의 처리대상이 되고, "가나다라마바"가 str1이 갖게되는 값이 된다.

 즉 사용되는 메모리가 많아지는 것이다.

 

 이로인해

 StringBuilder와 StringBuffer가 사용되는데,

StringBuilder sb = new StringBuilder("가나다");

System.out.println("sb.toString() : "+sb.toString());
sb.append("마바사");
System.out.println("sb.toString() : "+sb.toString());

를 하게되면, 출력은 

이 되고, 이 경우 Heap영역의 메모리를 더 적게 사용하게 된다.

당연히 String이 불변성으로 인해 값의 변화를 가져올때, 메모리를 더 사용한다했으니

StringBuilder와 StringBuffer는 가변성으로 인해 메모리의 절약을 할 수 있겠다.

 

이 둘의 차이는 동기화의 차이이고,

StringBuffer는 동기화를 하게되어 멀티스레드 환경에서 안전하고 ( thread-safe ) 대신 속도는 세가지 타입중에 가장 느리게 된다.

StringBuilder는 동기화를 하지 않아, 멀티스레드 환경에서 안전하지 않고, 속도는 String만큼 빠르다.

 

 추가로 String은 동기화를 하여, 멀티스레드 환경에서 안전하다.

'알고리즘' 카테고리의 다른 글

분수의 덧셈 ( 프로그래머스 문제, 코드 없음 )  (1) 2023.04.24
BOJ3052 - 서로 다른 나머지의 개수  (0) 2022.01.13
StringTokenizer  (0) 2022.01.11
EOF ( End Of File ) 과 while문  (0) 2022.01.11
BOJ2439 - 별찍기  (0) 2022.01.11