StringBuffer, StringBuilder는 무엇인가?

김문정·2024년 3월 25일
post-thumbnail

String, StringBuffer, StringBuilder?

String, StringBuffer, StringBuilder 는 문자형 클래스로 문자열을 저장하고, 관리하는 클래스이다.

String vs StringBuffer, StringBuilder

String과 StringBuffer, StringBuilder의 가장 큰 차이점은 String 은 불변(immutable), StringBuffer, StringBuilder 는 가변(mutable)이다.

String에서 문자열을 더하는(?) 방법은 .concat(), + "" 과 같은 방법이 있다고 생각할 수 있지만,
원래 값이 할당 되어 있던 메모리 영역은 GC에 의해 사라지고 새로운 값이 새로운 메모리 영역에 할당 되는 것이다.
불면(immutable)이기 때문에 문자열을 수정하는 순간 새로운 String 인스턴스가 생성된 것이다.

때문에 문자열이 변경이 많이 일어나는 경우에 StringBuffer, StringBuilder 메서드를 사용한다.

Buffer(데이터 공간) 크기의 기본값은 16개의 문자를 저장할 수 있고, 생성자를 통해 원하는 크기를 설정할 수 있다.
또한, 할당된 크기를 넘어서면 자동으로 Buffer의 크기가 커진다. 하지만 효율이 떨어지겠지 ?

sb.capacity(); //StringBuffer 변수의 배열 용량의 크기를 반환한다.

메서드 종류

  • sb.toString() : StringBuffer를 String으로 변환
  • sb.append("값")
  • sb.insert(index, "값") : 문자열 추가
  • sb.delete(index, index) : index ~ index 까지 삭제
  • sb.substring(index, index) : 문자열 추출(String으로 반환)
  • sb.length() : 문자열의 길이
  • sb.reverse() : 문자열 뒤집기
  • sb.replace(index, index, "값") : index ~ index 까지 값으로 대체
  • sb.charAt(int index) : index의 문자 추출(char로 반환)

사용방법 :

StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");

✨ String을 StringBuffer/StringBuilder로 바꾸는 방법

String str1 = "안녕하세요";
StringBuffer str2 = new StringBuffer(str1);
StringBuilder str3 = new StringBuilder(str1);

✨ StringBuffer/StringBuilder를 String으로 바꾸는 방법

StringBuffer sb1 = new StringBuffer("안녕하세요");
String str1 = String.valueOf(sb1);

✨ StringBuffer 클래스는 equals 메서드를 오버라이딩 하지 않는다.

StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
System.out.println(sb == sb2);          //  false
System.out.println(sb.equals(sb2));     //  false

toString()은 오버라이딩 되어있다.

→ StringBuffer 인스턴스에 담긴 문자열을 비교하기 위해서 toString() 호출 후 equals로 비교해야 한다.

String s = sb.toString();
String s2 = sb2.toString(); 
System.out.println(s.equals(s2)); // true

StringBuffer, StringBuilder 차이 ?

StringBuffer : 공통 메서드 동기화로 인해 멀티스레드 환경에서만 사용
StringBuilder : 단일스레드에서만 안전, Buffer에 비해 속도가 빠름

profile
영차 영차 🐢

1개의 댓글

comment-user-thumbnail
2024년 10월 27일

String... 어려워욥..! 헷갈려욥..!

답글 달기