String vs StringBuffer vs StringBuilder

초콜렛빵·2023년 9월 14일
0

TIL

목록 보기
27/27

String/ StringBuffer/ StringBuilder

  • 문자열을 다루는 자료형 클래스
  • 각 사용 목적에 따라 쓰임새가 다름

StringBuffer & StringBuilder

  • 문자열 연산(추가 or 변경) 시 사용되는 자료형
  • String+ 혹은 concat() 을 통해 문자열 추가 가능
  • 하지만, 여기서는 String 인스턴스가 새롭게 생성되며, 공간 낭비와 속도 저하 발생
  • 이를 해결하기 위해 제공하는 자료형

특징

  • 기본 값은 16개 문자 저장 가능하며 생성자를 통해 변경 가능
  • 연산 시, 자동으로 추가 할당
  • 다양한 내장 메서드 제공

String vs StringBuffer & StringBuilder

문자열 변경 여부

  • String
    • String은 불변 자료형이며, 이로 인해 연산 시 속도 저하가 발생
    • 연산에 대해서 메모리 내에 새로운 공간을 할당하여 새로 저장하며, 기존 저장 된 요소는 GC 대상 처리
    • 이는 캐싱, 보안, 동기화 측면에서 불변처리 되었기 때문
  • StringBuffer & StringBuilder
    • 공간 부족 시, 버퍼의 크기를 가변적으로 늘림
    • 내부 Buffer에 문자열 저장 후, 그 안에서 추가, 수정, 삭제가 이루어짐
    • .append(), delete() 동작이 발생하면, 동일 객체 내에서 문자열 크기 변경을 통해 진행

문자열 비교

  • String
    • String은 equals() 를 통해 비교
  • StringBuffer & StringBuilder
    • equals() 를 오버라이딩하지 않으며, 이로인해 == 연산과 동일
    • 비교 시, toString() 처리를 통해 String 변경 후, equals() 비교

StringBuffer vs StringBuilder

  • 차이점은 멀티 스레드 환경에서 안전(safe)한지 여부
  • StringBuffer는 thread safe / StringBuilder는 thread unsafe
  • 즉, 동기화 지원 여부가 StringBuffer는 동기화 지원, StringBuilder는 동기화 지원하지 않음
  • 이로 인해, 기본 성능 자체는 StringBuilder가 좀 더 빠름

String vs StringBuffer vs StringBuilder

StringStringBufferStringBuilder
가변 여부불변가변가변
동등 비교 방식equals()String으로 변경 후 equals() 비교String으로 변경 후 equals() 비교
스레드 세이프OOX
연산 속도느림빠름매우 빠름

출처

profile
차근차근 기록하고 배우는 개발자

0개의 댓글