String과 Stringbuilder/Stringbuffer 클래스의 가장 큰 차이점은 String은 불변의 속성을 갖는 다는 점이다.
이게 무슨 말이냐면 String으로 선언된 다음과 같은 코드의 경우
String str = "hi"; // String str = new String("hi"); 와 동일
str = str + " loo";
기존에 "hi"가 들어가 있던 str 변수가 "hi loo" 라는 값을 가지고 있는 새로운 메모리 영역을 가리키도록 변경되고 처음 선언했던 "hi" 값이 있던 메모리 영역은 Garbage로 남아있다가 GC에 의해 사라진다는 것이다.
따라서 변하지 않는 문자열을 자주 읽어들이는 경우에는 String 클래스를 사용한다면 성능 향상을 기대할 수 있다는 것이다. 또한 불변하다는 특성을 가지기 때문에 멀티쓰레드 환경에서도 안정성이 있다는 장점이 있다.
다만 문자열 추가, 수정, 삭제 등 연산이 빈번하게 발생하는 로직의 경우에 String 변수를 사용한다면 힙 메모리(Heap)에 많은 임시 가비지가 생성되어 힙메모리 부족으로 성능 저하가 발생할 수 있다!
-- Heap과 Stack 메모리 영역에 대해서는 따로 정리해서 봐야 겠다.
위와 같은 현상을 해결하기 위한 것이 Stringbuilder/Stringbuffer 클래스이다.
당연하게도 위 두 가지는 가변성을 가지기 때문에 .append(), .delete() 등의 api를 이용해서 동일 객체내애서 문자열을 변경하는 것이 가능하다.
StringBuffer sb= new StringBuffer("hello");
sb.append(" world");
- Stringbuffer/Stringbuilder 차이점
당연하게도 두개의 차이점이 존재한다.
Stringbuffer는 동기화 키워드를 지원한다. 따라서 멀티쓰레드 환경에서 String과 마찬가지로 안정성을 보장한다.
반대로 Stringbuilder는 동기화를 지원하지 않는다. 다만 그렇기 때문에 단일쓰레드 에서의 성능은 Stringbuffer 보다 뛰어나다.
- 사용 환경 정리
'웹개발 > 개념' 카테고리의 다른 글
멀티쓰레드 (0) | 2022.10.12 |
---|---|
[JAVA] 상속과 오버라이딩 (0) | 2022.10.12 |
웹 개발 개념 정리 (0) | 2022.10.11 |
면접 대비 - 웹 브라우저에 도메인 입력하면 일어나는 일? (0) | 2022.10.11 |
URL과 URI의 차이점 (0) | 2022.10.11 |