우리는 시간이 없다!!!
결론
String : 불변으로써 문자열 연산이 적고 멀티쓰레드 환경
StringBuffer : 가변으로써 문자열 연산이 많고 멀티쓰레드 환경
StringBuilder : 가변으로써 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우
개념
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]
'JAVA' 카테고리의 다른 글
[Java] mockito JUnit 5 에서 의존성 주입 - 테스트코드 작성(1) (0) | 2024.02.19 |
---|---|
[Gradle] gradle version 확인 방법 (0) | 2024.02.16 |
[Gradle][오류] variable * not initialized in the default constructor (0) | 2024.02.16 |
Spring Boot Batch(Job, Step) #2 (0) | 2021.02.28 |