https://ifuwanna.tistory.com/221
String
String과 StringBuffer/StringBuilder 클래스의 가장 큰 차이점은 String은 불변(immutable)의 속성을 갖는다는 점이다.
String에 새로운 값을 추가하게 되면 기존의 값이 변경되는 것이 아니라
추가한 값은 새로운 메모리영역을 할당받고, 기존의 값은 GC(garbage collection)에 의해 사라지게 된다.
즉, String 클래스는 불변하기 때문에 문자열을 수정하는 시점에서 새로운 String 인스턴스가 생성되는 것이다.
따라서 변하지 않는 문자열을 자주 읽어들이는 경우 String은 좋은 성능을 낸다.
하지만 문자열 추가, 수정, 삭제등의 연산이 자주 발생하는 경우에는 힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성
되어 힙메모리가 부족으로 어플리케이션 성능에 치명적인 영향을 끼치게 된다.
StringBuffer / StringBuilder
메모리 부족과 같은 문제를 해결하기 위해 **가변성(mutable)**을 가지는 StringBuffer / StringBuiler를 사용한다.
StringBuffer / StringBuiler는 .append(), .delete()등의 API를 이용하여 동일 객체내에서 문자열을 변경하는 것이 가능하다.
StringBuffer vs StringBuilder
- StringBuffer
동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전(thread-safe)하다.
- StringBuilder
동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만, 동기화를 고려하지 않는 만큼 단일쓰레드에서 성능은 훨씬 뛰어나다.
'Study > JAVA' 카테고리의 다른 글
[JAVA] 날짜와 시간 API 정리 (0) | 2022.01.24 |
---|---|
[Java] 디자인패턴 - 싱글톤 패턴 (singleton pattern) (0) | 2021.12.01 |
[Java] 람다식 (Lambda Expression) (0) | 2021.11.26 |
[Java] Stream API (0) | 2021.11.24 |
[Java] 컬렉션 (Collection) - Map (0) | 2021.11.23 |