[Java] #24 StringBuffer 클래스

febCho·2023년 12월 23일

Java

목록 보기
47/53

문자열 객체의 가장 큰 특징은 문자열 불변이다. 앞서 배운 String 클래스를 활용해 문자열을 생성할 경우, 문자열을 수정할 수 없다.

StringBuffer

문자열 불변

첨부한 이미지와 마찬가지로 하나의 참조형 변수에 문자열을 여러번 거듭해 대입한다면,

String str1 = "봄";
String str1 = "봄 여름";
String str1 = "봄 여름 가을";

이는 원래 있던 객체에 문자열을 추가하는 것이 아니라 기존의 참조를 끊고 새로운 객체를 생성하는 것이다.
따라서 끊긴 객체의 경우 '쓰레기 객체'가 되며, 자바는 소멸자가 존재하지 않기 때문에 직접 삭제할 수 없고, 메모리 부족 시 가비지 콜렉터가 알아서 삭제하기를 기다리는 수밖에 없다.

이렇게 문자열 가공 시 프로그램이 느려지는 것을 보완하기 위해 'StringBuffer' 클래스가 탄생했다.
수정할 때마다 새로 객체를 만들어야 하는 String과 달리 '객체를 하나만' 만든다는 특징을 갖는다.

package kr.s27.lang.stringbuffer;

public class StringBufferMain {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("여름 덥다!!");
		                                  //0123456
		System.out.println("1:" + sb);
		
		sb.insert(2, '이');
		System.out.println("2:" + sb);
		
		sb.append("가을은 ");
		System.out.println("3:" + sb);
		
		sb.append("시원하다.");
		System.out.println("4:" + sb);
		
		sb.replace(0, 3, "여행가자!!");
		System.out.println("5:" + sb);
		
		sb.deleteCharAt(0);
		System.out.println("6:" + sb);
		
		sb.delete(0, 3);
		System.out.println("7:" + sb);
		
		String str = sb.toString();
		System.out.println("str = " + str);
	}
}
StringBuffer sb = new StringBuffer("여름 덥다!!");
		                          //0 123 456

StringBuffer 클래스가 가지고 있는 메서드는 다음과 같다.

  1. insert() : 문자를 지정한 인덱스에 추가한다.
sb.insert(2, '이');
System.out.println("2:" + sb);
출력 결과)
2:여름이 덥다!!
  1. append() : 문자열을 기존 문자열의 뒤에 추가한다.
sb.append("가을은 ");
System.out.println("3:" + sb);
출력 결과)
3:여름이 덥다!!가을은

sb.append("시원하다.");
System.out.println("4:" + sb);
출력 결과)
4:여름이 덥다!!가을은 시원하다.
  1. replace() : 지정한 시작 인덱스부터 지정한 끝 인덱스 '전까지'의 문자열을, 인자로 넘겨준 문자열로 대체한다.
    인덱스 0(여)부터 3(여름이 다음 공백)의 전인 2(이)까지 지정한 문자열인 '여행가자!!'로 대체된 것을 확인할 수 있다.
sb.replace(0, 3, "여행가자!!");
System.out.println("5:" + sb);
출력 결과)
5:여행가자!! 덥다!!가을은 시원하다.
  1. deleteCharAt() : 지정한 인덱스의 문자를 삭제한다.
sb.deleteCharAt(0);
System.out.println("6:" + sb);
출력 결과)
6:행가자!! 덥다!!가을은 시원하다.
  1. delete() : 시작 인덱스와 끝 인덱스 '전까지'의 문자열을 삭제한다.
    인덱스 0(행)부터 3(!)의 전인 2(자)까지 삭제되어 출력된 것을 확인할 수 있다.
sb.delete(0, 3);
System.out.println("7:" + sb);
출력 결과)
7:!! 덥다!!가을은 시원하다.
  1. toString() : StringBuffer 객체를 String 객체로 변환한다. 이렇게 변환된 문자열은 String이 가지고 있는 메서드를 활용할 수 있다.
String str = sb.toString();
System.out.println("str = " + str);
출력 결과)
str = !! 덥다!!가을은 시원하다.
profile
Done is better than perfect.

0개의 댓글