study record
[JAVA] String, StringBuilder, StringBuffer 차이 본문
String과 StringBuffer/StringBuilder 클래스의 가장 큰 차이점
String은 불변(immutable)의 속성을 갖는다.
따라서 변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용하면 좋다.
그러나 문자열 추가,수정,삭제 등의 연산이 빈번하게 발생하는 알고리즘에 String 클래스를 사용하면 힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성되어 힙메모리가 부족으로 어플리케이션 성능에 치명적인 영향을 끼치게 된다.
이를 해결하기 위해 Java에서는 가변(mutable)성을 가지는 StringBuffer / StringBuilder 클래스를 도입했다.
StringBuffer/StringBuilder 는 가변성 가지기 때문에 .append() .delete() 등의 API를 이용하여 동일 객체내에서 문자열을 변경하는 것이 가능합니다. 따라서 문자열의 추가,수정,삭제가 빈번하게 발생할 경우라면 String 클래스가 아닌 StringBuffer/StringBuilder를 사용하셔야 합니다.
StringBuffer, StringBuilder의 차이점
가장 큰 차이점은 동기화의 유무로써 StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다. 참고로 String도 불변성을 가지기때문에 마찬가지로 멀티쓰레드 환경에서의 안정성(thread-safe)을 가지고 있습니다.
반대로 StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어납니다.
정리
String : (불변성) 문자열 연산이 적고, 단순 문자열 조회가 많은 경우, 멀티쓰레드 환경일 경우
StringBuffer : (가변성) 문자열 연산이 많고 멀티쓰레드 환경일 경우
StringBuilder : (가변성) 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우
'자바' 카테고리의 다른 글
[JAVA] Integer와 int 차이 (0) | 2021.02.10 |
---|---|
[JAVA] == 와 equals() 차이 (0) | 2021.02.04 |