[Java] String, StringBuffer, StringBuilder

hsnam·2022년 2월 1일
0

java

목록 보기
2/3
post-thumbnail

String, StringBuffer, StringBuilder

  • Java에서 문자열을 다루는 대표적인 클래스로는 String, StringBuffer, StringBuilder가 있다.
    개발을 하다보면 생각없이 String을 많이 쓰게 되는데 짧은 문자열이 아닌 복잡한 문자열을 써야 할때나 멀티스레드 환경에서 이슈들이 발생하므로 각 클래스의 특징을 이해 하고 사용해야 한다.

String

  • java.lang 패키지에 포함된 클래스로서 String 클래스는 문자열을 나타낸다. 또한 불변(Immutable) 특징을 가지고 있다.
  • concat 메서드 또는 + 연산자를 통해 기존에 생성된 String 클래스 객체 문자열에 다른 문자열을 붙여도 붙여도 기존 문자열에 생성되는 것이 새로운 String 객체를 만든 후 새 String 객체에 연결된 문자열을 저장하고 그 객체를 참조 하도록한다.
  • 즉 String에 문자열을 붙일때마다 새로운 객체를 생성하여 문자열을 만든다. String 객체는 이러한 이유로 문자열 연산이 많은 경우 성능에 문제가 있다.

StringBuffer / StringBuilder

  • StringBuffer와 StringBuilder는 String과 다르게 문자열 연산등으로 기존 객체의 공간이 부족하게 되는 경우 기존의 버퍼 크기를 늘리며 유연하게 동작한다.
  • 두 클래스의 차이는 동기화의 유무로써 스레드 환경에서 차이가 있다.
  • StringBuffer
    - 스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전하지 모를 경우 사용하면 좋다.
    - 싱글톤으로 선언된 클래스에 선언된 문자열일 경우에는 이 클래스를 사용해야만한다.
  • StringBuilder
    - 스레드에 안전한지의 여부와 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋다.
    - 만약 메서드 내에 변수를 선언했다면, 해당 변수는 그 메서드 내에서만 살아 있으므로 StringBuilder를 사용하면 된다.

정리

클래스내용
String문자열 연산이 적고 멀티쓰레드 환경일 경우
StringBuffer문자열 연산이 많고 멀티쓰레드 환경일 경우
StringBuilder문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우

0개의 댓글