반응형

1. String, StringBuilder, StringBuffer
 - String은 상수이며, 값을 만든 뒤 변경할 수 없다 (Immutable)
 - String 클래스의 한계 (불변객체 > immutable)
  > immutable(불변)한 특성으로 인해 문자열 변경시 메모리 낭비가 발생 (이전 문자열은 GC에 의해 제거) 
  > 문자열을 변경할 때마다 새로운 메모리가 할당됨
 - StringBuffer와 StringBuilder는 String과는 다르게 변형 가능(mutable)하고, 내부적으로 배열의 형태로 
   선언되기 때문에 문자열 처리 후 새로운 인스턴스가 할당되는 것이 아닌 기존의 객체에 이어 붙인다. 
   따라서 훨씬 속도도 빠르고 공간의 낭비도 적다.

2. StringBuilder
 - 문자열을 변경하거나 이어붙이는 경우 추가 메모리 생성없이 기존 문자열이 변경되는 클래스 (가변객체 > mutable)
 - 멀티 쓰레드 환경에서 문자열의 안전한 변경을 보장해주지 않는다. (여러 쓰레드가 동시에 접근/변경하는 경우 수행결과가 올바르지 않음)

3. StringBuffer
 - StringBuilder와 마찬가지로 문자열을 이어붙이는 경우 추가 메모리 생성없이 기존 문자열이 확장되는 클래스 (가변객체 > mutable)
 - StringBuffer는 멀티쓰레드 환경에서 문자열의 안전한 변경을 보장한다. (두 쓰레드가 동시에 문자열에 접근하더라도 안전한 변경을 보장)

4. StringBuilder와 StringBuffer의 차이
 - 동기화 : StringBuffer는 동기화 기능 지원, StringBuilder는 동기화 미지원이지만 단일 쓰레드에서는 StringBuffer보다 빠르다.
 - 언제 어느걸 써야할까?
  > StringBuilder : 싱글 쓰레드 환경에 적합, 스레드가 안전한 프로그램이거나 오류가 나도 큰 이슈가 없고 성능이 중요한 경우
    > StrngBuffer : 멀티 쓰레드 환경에 적합, 연산이 많을 경우 유리

5. 성능 차이 (String vs StringBuilder vs StringBuffer)
 - 3개의 성능을 비교해보면 StringBuilder > StringBuffer > String 순으로 StringBuilder가 제일 빠름
 - 싱글 쓰레드인 경우 StringBuilder와 StringBuffer의 성능 차이 > StringBuilder가 연산속도가 빠르다
 
* 참고
 - https://life-with-coding.tistory.com/485
 - https://blog.neonkid.xyz/286

'개발 > Java' 카테고리의 다른 글

System.out.println() 사용 안하는 이유  (0) 2022.12.14
[Java] Garbage Collection(가비지 컬렉션)  (2) 2022.12.02
equals()  (0) 2022.11.30
[자바/JAVA] 정적 변수와 메서드 (static)  (0) 2021.06.25
[자바/JAVA] this  (0) 2021.06.24

+ Recent posts