본문 바로가기

기타

[자바/Java] String, StringBuilder, StringBuffer 차이점

반응형

이번 포스팅은 String, StringBuider, StringBuffer 이 3가지의 각 특징과 차이점에대한 내용입니다.

위 3가지 모두 문자열을 저장하고 관리하는 클래스지만 가장 큰 차이점은 String은 immutable로 불가변적이고 StringBuider와 StringBuffer는 mutable로 가변적입니다.
여기서 가변, 불가변은 문자열이 아닌 각 클래스가 인스턴스화 됐을때 할당된 메모리 공간에 대한 변화 여부를 뜻합니다. 

String
String클래스 객체를 생성했을때 할당된 메모리 공간은 변하지 않습니다. 흔하게 문자열에 '+'로 문자열을 더할때마다 새로운 객체를 생성하며, 기존 객체는 가비지 컬레터에의해 수거됩니다. ( 언제 수거될지 알수 없음 ) 
이러한 이유로 String 클래스는 문자열 연산이 많을때 효율적이지 않습니다.

StringBuffer와 StringBuilder
두 클래스는 생성된 객체에 문자열 연산이 발생하면 기존의 버퍼 크기를 늘립니다. 그래서 문자열 연산이 많을때 String클래스 보다 효율적입니다.
그렇다면 StringBuffer와 StringBuilder의 차이점은 무엇일까요? 바로 synchronized키워드 지원 여부입니다.
StringBuffersynchronized키워드를 지원하기 때문에(thread-safe) 멀티쓰레드 환경에서 안전합니다. 그에반해 StringBuilder는 synchronized키워드를 지원하지 않기때문에 단일쓰레드 환경에서 사용해야 안전합니다.

  String StringBuffer StringBuilder
가변 여부 불변 가변 가변
thread-safe 안전 안전 불안전
사용예 단순 호출이 많은 경우  멀티스레드 환경에서 문자열 연산이 많은 경우 단일스레드 환경에서 문자열 연산이 많은 경우 

 

ps.JDK 1.5버전부터는 컴파일 단계에서 String클래스대신 StringBuilder클래스로 컴파일 되도록 변경돼 큰 성능 차이는 느낄 수 없다고 합니다. 그래도 멀티쓰레드 여부에 따라 StringBuilder와 StringBuffer중 하나를 택해서 사용하는 습관을 들이면 좋을것 같습니다.

 

 

반응형

'기타' 카테고리의 다른 글

윈도우 이클립스 설치  (2) 2018.07.08
[매일프로그래밍] 4월 30일  (0) 2018.06.24
[매일프로그래밍] 4월 16일  (0) 2018.04.24
[매일프로그래밍] 4월 9일  (0) 2018.04.09
[매일프로그래밍] 4월 2일  (0) 2018.04.02