StringBuilder와 StringBuffer

StringBuilder, StringBuffer

StringBuilder, StringBuffer Class는 문자열을 변경하거나 이어붙이는 경우 메모리를 추가생성할 필요없이 기존 문자열을 확장시키는 클래스이다.

두 Class의 차이점은?

  • StringBuilder
    동기화 지원하지 않음
    not thread-safe : 멀티스레드 환경에서 문자열의 안전을 보장해주지 않음
    단일스레드에서 안전이 보장됨
  • StringBuffer
    동기화 지원
    thread-safe : 멀티스레드 환경에서 문자열의 안전한 변경을 보장함

Thread-safe란?
멀티스레드프로그래밍에서 어떤 변수에 동시 접근이 이루어져도 프로그램 실현에 전혀 문제가 없음을 말한다. 즉, 두 thread가 동시에 한 문자열에 접근하더라도 안전한 변경을 보장해준다.


String의 한계

String Class는 한 번 생성되면 문자열이 변경되지 않는 불변(immutable)의 성질을 지니고 있다. 즉, 기존 문자열에 새로운 문자열을 추가하려면 메모리에서 문자열이 변경되는 것이 아니라 새로운 메모리 공간을 확보하여 문자열이 생성된다.

StringBuilder와 StringBuffer 사용 이유

String str = "abc";
str = str.concat("12");

이런 코드처럼 String의 변경이 빈번한 경우, 메모리 자원낭비를 초래하기 때문에 StringBuilder와 StringBuffer를 사용하는 것이 좋다.

그럼 String은 왜쓰지?

String 클래스는 불변(immutable) 속성을 가짐으로써 안전하다고 했습다. 값이 변경되지 않기 때문에 여러 스레드가 데이터를 공유하더라도 동기화를 신경쓸 필요가 없이 안정성이 유지되는 장점이 있다.

좋은 웹페이지 즐겨찾기