suyeonme

[Java] String, SpringBuffer, StringBuilder의 차이점 본문

프로그래밍👩🏻‍💻/Java

[Java] String, SpringBuffer, StringBuilder의 차이점

suyeonme 2023. 4. 16. 22:23

문자열을 다루는 대표적인 클래스로 String, StringBuffer, StringBuilder가 있다.

String 클래스는 불변성(immutable)을 가지고, StringBuffer, StringBuilder는 가변성(mmutable)을 가진다.

String

  • 불변성(immutable)을 가지므로 변하지 않는 문자열을 저장하는데 적합하다.
  • thread-safe하므로 멀티 스레드 환경에서 사용하기 적합하다.
String str = "I am a";
str = str + "developer";
// I am a developer

 

위 예시의 경우, str 변수의  "I am a" 값을 할당받은 메모리는 GC(Garbage Collection)되고, "I am a developer" 값을 할당받은 새로운 메모리 영역을 가리키게된다. 즉 String은 불변하므로, 문자열을 수정하는 시점에 String 인스턴스가 새롭게 생성된다.

 

StringBuilder

  • 가변성(mmutable)을 가지므로, 문자열의 추가/수정/삭제가 빈번하게 발생하는 경우 적합하다.
  • thread-safe하지않으므로 멀티스레드 환경에서의 사용이 적합하지 않다. 동기화를 지원하지 않기때문에 싱글스레드 환경에서는 StringBuffer보다 성능이 뛰어나다.
StringBuilder stringBuilder = new StringBuilder("I am a");
stringBuilder.append("developer");
String str = stringBuilder.toString();

StringBuffer

  • 가변성(mmutable)을 가지므로, 문자열의 추가/수정/삭제가 빈번하게 발생하는 경우 적합하다.
  • thread-safe하므로 멀티스레드 환경에서 사용한다.
StringBuffer stringBuffer = new StringBuilder("I am a");
stringBuffer.append("developer");
StringBuffer str = stringBuffer.toString();

 

Comments