이번 포스팅은 String, StringBuider, StringBuffer 이 3가지의 각 특징과 차이점에대한 내용입니다.
위 3가지 모두 문자열을 저장하고 관리하는 클래스지만 가장 큰 차이점은 String은 immutable로 불가변적이고 StringBuider와 StringBuffer는 mutable로 가변적입니다.
여기서 가변, 불가변은 문자열이 아닌 각 클래스가 인스턴스화 됐을때 할당된 메모리 공간에 대한 변화 여부를 뜻합니다.
String
String클래스 객체를 생성했을때 할당된 메모리 공간은 변하지 않습니다. 흔하게 문자열에 '+'로 문자열을 더할때마다 새로운 객체를 생성하며, 기존 객체는 가비지 컬레터에의해 수거됩니다. ( 언제 수거될지 알수 없음 )
이러한 이유로 String 클래스는 문자열 연산이 많을때 효율적이지 않습니다.
StringBuffer와 StringBuilder
두 클래스는 생성된 객체에 문자열 연산이 발생하면 기존의 버퍼 크기를 늘립니다. 그래서 문자열 연산이 많을때 String클래스 보다 효율적입니다.
그렇다면 StringBuffer와 StringBuilder의 차이점은 무엇일까요? 바로 synchronized키워드 지원 여부입니다.
StringBuffer는 synchronized키워드를 지원하기 때문에(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 |