반응형
Java에서는 문자열을 다룰 때 String, StringBuffer, StringBuilder가 있습니다.
이 차이를 제대로 모르고 쓴다면 연산이 많이 질 경우 문제가 발생 하게 됩니다.
그 차이에 대해 알아 보도록 하겠습니다.
String과 StringBuffer, StringBuilder의 차이
String은 불변, Buffer와 Bulder는 가변 객체 입니다.
불변이란 객체를 변화 시킬 수 없는 것이고, 가변은 객체가 변할 수 있는 것 입니다.
예를 들어 보겠습니다.
아래의 코드는 문자열을 더했지만 String 클래스가 연산한 값을 새로운 String 객체로 생성한 것 입니다.
결과는 "ab"이지만 새로 "b" 문자열을 합칠 때 새로운 객체를 생성하고 이전의 str 객체는 GC에 의해서 제거 되게 됩니다.
String str = "a";
str += "b";
a를 저장 생성 했을 때 참조 주소
b를 추가 했을 때 참조 주소
즉, 위와 같이 연산이 빈번하게 일어나게 되면 String을 사용하는 것은 옳지 않습니다.
Buffer 또는 Builder를 사용해야 합니다.
StringBuffer와 StringBuilder의 차이
StringBuffer
- 동기화가 가능하기 때문에 멀티 쓰레드에 안전합니다.
- 멀티 쓰레드란 여러 군데에서 동시에 요청이 들어 온다고 생각 하시면 됩니다.
- 동기화란 멀티 쓰레드에서 동시화 요청이 오면 모든 쓰레드가 동기화 되어 있기 때문에 한 쓰레드의 요청이 끝날 때 까지 기다려야 합니다.
그렇기 때문에 하나의 StringBuffer 객체를 여러 쓰레드가 변경할 수 없기 때문에 멀티 쓰레드에 안전하게 됩니다.
이를 thread-safe라고 합니다.
StringBuilder
- StringBuffer와 다른 점은 동기화가 불가능 하다는 것 입니다.
- 동기화를 고려하지 않아도 되기 때문에 단일 쓰레드에서 사용하게 된다면 Buffer보다 성능이 뛰어 납니다.
정리
- 단일 쓰레드에서는 StringBuilder 멀티 쓰레드에서는 StringBuffer를 사용하는게 좋다고 생각 합니다.
반응형
'Java' 카테고리의 다른 글
Java로 자료구조 이해하기 2편(Arraylist와 LinkedList) (0) | 2021.10.02 |
---|---|
Java Serializable (0) | 2021.10.02 |
java로 쿠키와 세션 이해하기 (0) | 2021.10.02 |
Java로 자료구조 이해하기 1편(Array와 ArryaList의 차이점) (0) | 2021.09.30 |
static메서드에 generic 사용 (0) | 2021.09.24 |