728x90

String, StringBuilder, StringBuffer 차이점

  • String 객체는 한번 생성되면 할당된 공간이 변하지 않는다.
  • String 객체는 concat 또는 + 연산자를 통해 기존 생성된 String 객체 문자열에 다른 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 것이 아닌, 새로운 String 객체를 만든 후 문자열을 저장하고 그 객체를 참조한다.
  • 즉 String 객체는 concat 또는 + 연산자를 많이 사용 할 수록 String 객체의 수가 늘어나기 때문에 성능이 느려진다.
  • StringBuffer나 StringBuilder의 경우 객체의 공간이 부족해 지는 경우 버퍼의 크기를 유연하게 늘려준다.
  • 이러한 특징을 String은 불변(immutable)하고 StringBuffer와 StringBuilder는 가변(mutable)하다.

 

StringBuilder, StringBuffer 같은점, 차이점

같은점

  • StringBuilder와 StringBuffer는 둘 다 크기가 유연하게 변하는 가변적인 특성을 가진다.
  • 제공하는 메소드도 같고 사용하는 방법도 동일하다.

 

차이점

  • 두 클래스는 동기화 지원의 유무가 다르다.
  • StringBuffer는 각 메소드 별로 synchronized keyword가 존재하여 멀티 스레드 상태에서 동기화 지원.
  • StringBuilder는 단일 스레드 환경에서만 사용하도록 설계되어 있다.
  • StringBuffer는 멀티 스레드 환경에서도 안전하게 동작할 수 있다.

 

정리

  • String
    • 짧은 문자열을 더할 경우
    • 문자열 연산이 적고 멀티 스레드 환경일 경우
  • StringBuffer
    • 스레드에 안전한 프로그램이 필요하거나, 개발 중인 시스템의 부분이 스레드에 안전하지 모를 경우
    • 문자열 연산이 많고 멀티 스레드 환경일 경우
  • StringBuilder
    • 스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 경우
    • 문자열 연산이 많고 단일 스레드이거나 동기화를 고려하지 않아도 되는 경우

 

728x90

+ Recent posts