String 불변(Immutable)
String text = "Hello World"
text += "!!!!" // Hello World!!!!
"Hello World" + "!!!!"
내용이 합쳐져서
"Hello World!!!!" 처럼 보일 수 있지만
text가 가지고 있는 "Hello World!!!!" 값은
새로운 메모리 영역을 가르키게 된다.
처음 선언했던 "Hello World" 로 할당 되어있는 메모리 영역은
Garbage로 남아있다가 GC(Garbage Collection)에 의해 사라지게 된다.
String은 불변하기 때문에
문자열을 다시 선언하는 시점에서
새로운 String 인스턴스가 생성된 것이다.
변하지 않는 문자열을
자주 호출할 경우 String 클래스가 적절할 수 있으나
문자열 추가, 삭제, 수정 등의 연산이 자주 일어나는 알고리즘에
String 클래스를 사용하면
힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성되어 힙메모리 부족으로
성능상 영향을 미칠 수 있다.
StringBuilder 가변(Mutable)
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
StringBuilder text = new StringBuilder();
text.append("Hello");
text.append(" World!"); //Hello World!
메소드 종류
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
동기화를 지원하지 않음
동기화를 고려하지 않기 때문에
단일 쓰레드에서는 성능이 좋음
StringBuffer 가변(Mutable)
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
StringBuffer text = new StringBuffer();
text.append("Hello");
text.append(" World!"); //Hello World!
동기화 키워드를 지원
멀티쓰레드 환경에서 안전(thread-safe)
동기화를 고려하기 때문에
상대적으로 성능이 떨어질 수 있음
String도 불변성을 가지기 때문에
멀티쓰레드 환경에서 안전하다.
https://ifuwanna.tistory.com/221#comment8911546
'SpringBoot' 카테고리의 다른 글
RequestParam(required = true) null exception 하는 법 (0) | 2022.10.05 |
---|---|
jib 배포, 코드 배포, 코드 컨테이너, 앱 컨테이너 만들기 (0) | 2022.07.15 |
통신 중 실패했을 때 재시도하기 (@Retryable, @Recover) (0) | 2021.12.22 |
DB 통신 속도 증가 Cacheable CacheEvict redis 활용 (0) | 2021.12.21 |
Junit에서 assertThat(.isEqualTo) 활용하기 (0) | 2021.10.22 |