String, StringBuilder, StringBuffer

parkrootseok·2025년 2월 5일

자바

목록 보기
11/19
post-thumbnail

String, StringBuilder, StringBuffer

String, StringBuilder, StringBuffer는 Java에서 문자열을 다루기 위해 자주 사용되는 클래스입니다. 사용하기에 앞서 차이를 명확히 이해하는 것이 중요합니다. 이들에 대한 특징과 차이를 살펴보도록 하겠습니다.

String

String불변 객체로 한 번 생성되면 내부 값이 변경되지 않습니다. 문자열 수정이 발생할 경우, 기존 객체를 변경하는 것이 아니라 새로운 객체를 생성합니다. 이로 인해, 멀티-쓰레드 환경에서 동기화 없이 안전하게 사용할 수 있습니다.

StringBuilder

StringBuilder가변 객체로 내부 버퍼를 변경할 수 있습니다. 따라서, 문자열 수정이 발생할 경우, 기존 객체를 수정합니다. 하지만, 멀티-쓰레드 환경에서 안전하지 않기 때문에 비동기 환경엔 적합하지 않습니다.

StringBuffer

StringBufferStringBuilder와 유사하게 가변 객체로 내부 버퍼를 변경할 수 있어, 수정 발생 시 기존 객체를 수정합니다. 차이점은 멀티-쓰레드 환경에서 안전하게 동작할 수 있도록 내부 메서드에 synchronized 키워드가 적용되어 있어, 비동기 환경에서도 사용할 수 있습니다. 하지만, 동기화 비용으로 인해 StringBuilder보다 성능이 다소 낮다는 단점이 있습니다.

결론

이에 따른 결론은 다음과 같습니다.

  • 문자열 변경 X -> String 사용
  • 멀티 쓰레드 환경 X, 문자열 자주 수정 -> StringBuilder
  • 멀티 쓰레드 환경 O, 문자열 자주 수정 -> StringBuffer

예상 질문

String, StringBuffer, StringBuilder의 차이는?

가변성과 불변성

  • String만 불변성을 가지고 나머지는 불변성

불변성을 가지는 것들의 차이는?

  • StringBuilder는 비동기 방식
    • Thread-safe 하지 않음, 성능 높음
  • StringBuffer는 동기 방식
    • Thread-safa 함, 비교적 성능 낮음
profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글