[Java] String vs StringBuffer vs StringBuilder

일단 해볼게·2023년 4월 26일
0

String

  • 한번 생성되면 할당된 메모리 공간이 변하지 않음 → immutable
    • 내부를 보면 변수를 final로 지정해서 바꾸지 못한다.

      String a = "a"; // 메모리공간 1 -> a = "b";를 계속 사용하게 된다면 GC에 의해 사라진다.
      String a = "b"; // 메모리공간 2 
      
      // 메모리 공간이 많이 사용되어 성능이 좋지않다. 
  • 힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성 → GC의 동작
  • 불변성때문에 멀티쓰레드 환경에서 안전 (thread-safe)

StringBuffer & StringBuilder 공통점

  • 기존 객체의 공간이 부족하게 되는 경우 기존의 버퍼 크기를 늘리며 동작 → mutable
  • 문자열의 추가,수정,삭제가 빈번하게 발생할 경우 사용 권장
    StringBuffer a = new StringBuffer("a"); -> "a" / 메모리 공간 1
    a.append("b"); -> "ab" / 메모리 공간 1

StringBuffer & StringBuilder 차이점

StringBufferStringBuilder
멀티쓰레드 환경에서 안전한가? (동기화를 지원)OX

StringBuffer는 쓰레드에 안전한가? 이걸 체크하기 때문에 체크하는 과정에서 시간이 상대적으로 많이 소모된다.

StringBuilder는 쓰레드에 안전한지 체크를 안하기 때문에 시간이 적게 소모된다.

간단 비교

StringStringBufferStringBuilder
가변 여부불변가변가변
연산 속도느림빠름아주 빠름
쓰레드 세이프OOX

참고

https://inpa.tistory.com/entry/JAVA-☕-String-StringBuffer-StringBuilder-차이점-성능-비교

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글