본문 바로가기
☕Java/Java 기본

String, StringBuffer, StringBuilder 비교

by 캔 2022. 7. 24.

  mutable immutable
동기화 지원, thread-safe StringBuffer String
동기화 지원 안 함 StringBuilder  

String, StringBuffer, StringBuilder는 모두 문자열을 다루는 클래스이다. 하지만 각각 다른 특성을 갖고 있다.

 

먼저, String은 불변(immutable) 속성을 가진다. '불변'이란 메모리의 한 공간에 처음 값이 할당되고 나면 변하지 않음을 뜻한다. 그렇다고 한 번 할당한 변수에 다시 할당한다고 예외나 오류가 발생하지 않는다. 이때는 새로운 값을 가진 객체를 새로 생성하고 그 객체를 가리키게 된다. 처음에 생성된 객체는 힙 영역에 남아 있다가 가비지 컬렉션의 대상이 된다. 값을 할당할 때마다 새로운 객체가 생성되므로, String의 값이 자주 추가, 수정, 삭제되는 경우(정확히는 자주 새로운 값이 할당되는 경우) 힙 영역을 많이 차지하여 애플리케이션의 성능을 저하시킬 수 있다. 따라서, 런타임에 String 값이 빈번하게 바뀔 것이 예상되면 String이 아니라 StringBuffer나 StringBuilder를 사용하는 것이 좋다.

 

반면에 StringBuffer와 StringBulider는 가변(mutable) 속성을 가진다. StringBuffer는 동기화(synchronization)를 지원하여 멀티 스레드 환경에서도 안전(thread-safe)하지만 StringBuilder는 그렇지 않다.

 

또한, String과 StringBuilder가 StringBuffer보다 더 처리 속도가 빠르다고 한다.