String은 불변성을 가지기 때문에 변하지 않는 문자열을 자주 읽어들이는 경우 String을 사용해 주시면 좋은 성능을 기대할 수 있습니다. 그러나 문자열 추가,수정,삭제 등의 연산이 빈번하게 발생하는 알고리즘에 String 클래스를 사용하면 힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성되어 힙메모리가 부족으로 어플리케이션 성능에 치명적인 영향을 끼치게 됩니다.
이를 해결하기 위해 Java에서는 가변(mutable)성을 가지는 StringBuffer / StringBuilder 클래스를 도입했습니다.
String 과는 반대로 StringBuffer/StringBuilder 는 가변성 가지기 때문에 .append() .delete() 등의 API를 이용하여 동일 객체내에서 문자열을 변경하는 것이 가능합니다. 따라서 문자열의 추가,수정,삭제가 빈번하게 발생할 경우라면 String 클래스가 아닌 StringBuffer/StringBuilder를 사용하셔야 합니다.
StringBuffer sb= new StringBuffer("hello");
sb.append(" world");
System.out.println(sb.toString());
//결과
hello world
String : 문자열 연산이 적고 멀티쓰레드 환경일 경우
StringBuffer : 문자열 연산이 많고 멀티쓰레드 환경일 경우
StringBuilder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우
'Algorithm > Data Structure' 카테고리의 다른 글
[Java] int 형(Primitive type)배열을 List로 + 내림차순( Stream 사용) (0) | 2022.11.22 |
---|---|
[Java] 자바의 데이터 타입(primitive type, reference type) (0) | 2022.11.22 |
[Python] 힙 자료구조 / 힙큐(heapq) (0) | 2022.09.19 |
Python Deque(Double-Ended Queue) + Stack, Queue 간단개념 (0) | 2021.12.23 |
Arrays.sort ( 사전순서대로 정렬해주는 메소드) (0) | 2021.10.25 |