프로그래밍 언어/[ Java ]

[ Java ] 06. String, StringBuffer, StringBuilder의 특징

kim.svadoz 2021. 6. 13. 13:43
반응형

String, StringBuffer, StringBuilder


분류 String StringBuffer StringBuilder
Storage Area Heap or Constant String Pool Heap Heap
변경 No (Immutable)(불변) Yes (Mutable)(가변) Yes(Mutable)(가변)
동기화 Yes Synchronized 가능 (Thread-safe) Synchronized 불가능.

String 특징

  • new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않습니다.(Immutable)
    ex. + Boolean, Integer, Float, Long
  • Garbage Collector로 제거되어야 합니다.
  • 문자열 연산시 새로 객체를 만드는 Overhead가 발생합니다.
  • 문자열 연산이 많이 일어나는 경우 더 이상 참조되지 않는 기존 객체는 Garabage Collector에 의해 제거되어야 하기 때문에 성능이 좋지 않습니다.
  • 객체가 불변하므로, 멀티쓰레드에서 동기화를 신경 쓸 필요가 없습니다.(조회 연산에 매우 큰 장점!)
  • 객체가 가지는 값마다 새로운 객체가 필요하기 때문에, 메모리 누수와 새로운 객체를 계속 생성해야하기 때문에 성능저하를 발생시킬 수 있습니다.

String 클래스 : 문자열 연산이 적고, 조회가 많은 멀티쓰레드 환경에서 좋다

StringBuffer, StringBuilder 특징

  • 공통점
    • new 연산으로 클래스를 한 번만 만듭니다.(Mutable)
    • 문자열 연산 시 새로 객체를 만들지 않고, 크기를 변경시킵니다.
    • StringBuffer와 StringBuilder 모두 동일한 메서드를 가지고 있습니다.
  • 차이점
    • StringBuffer는 각 메서드별로 Synchronized Keyword가 존재하여 멀티 쓰레드 환경에서 동기화를 지원합니다.
    • 따라서 StringBuffer는 Thread-Safe하고, StringBuilder는 Thread-Safe하지 않습니다.

StringBuffer 클래스 : 문자열 연산이 많은 멀티쓰레드 환경

StringBuilder 클래스 : 문자열 연산이 많은 싱글쓰레드 혹은 Thread를 신경 안쓰는 환경

출처
https://github.com/gyoogle/tech-interview-for-developer

반응형