study record

[JAVA] String, StringBuilder, StringBuffer 차이 본문

자바

[JAVA] String, StringBuilder, StringBuffer 차이

asong 2021. 2. 5. 17:39

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