5. What is the difference between String and StringBuffer ?

toutbon·2024년 2월 22일
0

질문의 목적

  • String 과 StringBuffer의 차이
  • 기본적으로 자바는 프로그램의 편의성을 위해서 + 연산자를 지원함
  • 그럼에도 불구하고 스프링 버퍼 Class를 이용하는 이유는 메모리 관리가 효율적이기 때문.

String

  • String 객체는 Heap 메모리에서 한 번 값이 정해지면, 변하지 않는 불변적인 성격(Immutable)을 가지고 있음
  • 따라서 새로운 값을 가져야 한다면 기존의 값에서 변형을 하는 것이 아니라, 새롭게 객체를 형성하게 됨
  • 예시 )
String s1 = "South Korea"; 
s1 = s1 + "Seoul"; 

String Buffer

  • String Buffer 는 가변적임(mutable)
  • 한번 값이 결정 되어도 그 후에 따로 객체를 생성하지 않고 기존 객체에 값만 변경 함
  • 기존 객체 재사용
  • 메모리 관리에 효율적이기 때문에 문자율 변경이 빈번히 일어날때 사용
StringBuffer s2 = new StringBuffer("South Korea");
s2.append("Seoul");

StringBuffer vs StringBuilder

  • StringBuilder 예시
StringBuilder s3 = new StringBuilder("South Korea);
s3.append("Seoul")
  • StringBuffer 와 코드상 거의 유사하고, mutable 하다.
  • StringBuffer 보다 속도가 빠르다
    - 왜? StringBuffer 는 Synchronous 이고, StringBuilder는 Non-synchronus 이기 때문
    - Synchronous 란? 하나의 제한되어있는 데이터를 여러 스레드가 사용할 경우 데이터가 깨지지 않게스레드를 줄을 세운다음 키를 가지고 있는 스레드만 접근 가능하도록, 나머지는 순차적으로 접근가능하게 하는 방법 --> 데이터 무결성 보장, 처리시간이 오래걸림
  • 멀티 스레드를 고려하지 않고 단순히 문자열 병합만 한다면 StringBuilder의 퍼포먼스가 가장 좋다

KeyWord

  • String - Immutable(불변)
  • StringBuffer - Mutable(가변)
  • StringBuilder - Mutable, StringBuffer 보다 퍼포먼스가 좋음 (non-Sychronous)
profile
뚜봉

0개의 댓글