본문 바로가기

안드로이드 자바 코틀린 기초 지식/자바 기초지식

String, StringBuilder, StringBuffer 차이

Java에서 문자열을 다루를 대표적인 클래스는 아래 3가지가 있다.

  • String 
  • StringBuffer 
  • StringBuilder 

1) String

먼저 String과 다른 클래스(StringBuffer, StringBuilder)의 기본적인 차이는 String은 immutable(불변), StringBuffer는 mutable(변함)에 있습니다.

 

예를 들어,String을 이용해 문자열 + 문자열을 한다면 새로운 메모리영역을 만들어서 저장후 그 메모리를 가리키게 변경하고 기존에 있었던 부분은  GC에 의해 사라지게 된다.

String str1 = "one ";  
String str2 = "two ";
String str1 = str1 + str2;  // "one two "
str1의 "one "을 가르키던 부분은 사라지고 새로 메모리를 할당해 "one two "를 가리키는 부분으로 변한다는 얘기

 

2) StringBuffer & StringBuilder

 

이 둘의 공통점은 String과는 다르게 mutable 변할수 있다는 것이 공통점이다.

다른 점은 멀티쓰레드 환경에서 안전한지 아닌지다.

 

StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다.  

StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 안전하지 않다.

 

속도는 StringBuilder가 제일 빠르다. 대신 위에 언급한 3가지중 성능이 제일 뛰어나다.

 

즉 상황에 맞게 사용하는게 효율적이다.

  • String                :  문자열 연산이 많이 없고 멀티쓰레드 환경일 경우
  • StringBuffer     :  문자열 연산이 많고 멀티쓰레드 환경일 경우
  • StringBuilder   :  문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우