JAVA

[Java] String, StringBuffer, StringBuilder 차이 및 장단점

우엥우아앙 2021. 4. 2. 23:24

우리는 시간이 없다!!!

결론

String : 불변으로써 문자열 연산이 적고 멀티쓰레드 환경

StringBuffer : 가변으로써 문자열 연산이 많고 멀티쓰레드 환경

StringBuilder : 가변으로써 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우

img

개념

String vs StringBuffer , StringBuilder

 

String 은 불변(immutable)

변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용해주면 좋은 성능을 기대할 수 있다.

그러나, 문자열 추가, 수정, 삭제 등의 연산이 빈번하게 발생하는 알고리즘에 String 클래스를 사용하면 힙 메모리(heap)에 많은 임시 가비지(Garbage)가 생성되어 힙메모리가 부족으로 어플리케이션 성능에 치명적인 영향을 끼치게 된다.

이를 해결하기 위해서 가변(mutable)성을 가지는 StringBuffer / StringBuilder 클래스를 도입했다.

동일 객체내에서 문자열을 변경하는 것이 가능하다.

 

 

StringBuffer vs StringBuilder

 

동기화의 유무

StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다. 참고로 String 도 불변성을 가지기 때문에 마찬가지로 멀티쓰레드 환경에서 안정성(thread-safe) 을 가지고 있다.

반대로 StringBuilder 는 동기화를 지원하지 않기 때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어나다.

 

출처: https://ifuwanna.tistory.com/221 [IfUwanna IT]