[Java] StringBuffer

2024. 10. 12. 17:22Java

오늘은 StringBuffer 클래스가 무엇인지 알아보자.


StringBuffer

String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없기 때문에 문자열 결합시 계속해서 새로운 인스턴스를 생성한다.
하지만 StringBuffer클래스는 변경이 가능하다.
내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며,

StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있다.

크기를 지정할 때 나중에 편집을 고려하여 버퍼의 길이를 충분히 잡아주는 것이 좋다.

버퍼의 길이를 넘어서게 되면 버퍼의 길이를 늘려주는 작업을 추가적으로 해야 하기 때문이다.

 

StringBuffer의 생성자

StringBuffer클래스의 인스턴스를 생성하면 동시에 char형 배열이 생성된다.

이 배열은 이후 문자열을 저장하고 편집하기 위한 공간(buffer)로 사용된다.

따라서 StringBuffer클래스의 생성자는 위 char형 배열의 길이를 매개변수로 받게 되어있다.
만약 매개변수로 길이를 지정해주지 않을시 16개의 문자를 저장할 수 있는 크기의 버퍼를 생성한다.

public StringBuffer(int length) {
	value = new char[length];
    shared = flase;
    // 인스턴스 생성시 int값을 넣어주면 해당 길이의 배열생성
}

public StringBuffer() {
	this(16);
    // 인스턴스 생성시 아무런 값을 넣지 않으면 길이를 16으로 지정
}

public StringBuffer(String str) {
	this(str.length() + 16);
    append(str);
    // 인스턴스 생성시 문자열을 넣으면 해당 문자보다 16 더 크게 버퍼 생성
}

 

StringBuffer를 이용하여 문자열 변경하기

StringBuffer sb = new StringBuffer("abc");
// char[]에 앞에서부터 a,b,c를 저장

sb.append("123");
// 배열에서 a,b,c 뒤에 1,2,3 추가하여 저장
// append()는 반환타입이 StringBuffer인데 자신의 주소를 반환한다.

StringBuffer sb2 = sb.append("가나");
// sb내용 뒤에 가,나를 덧붙인다.

System.out.println(sb);		// "abc123가나" 출력
System.out.println(sb2);	// "abc123가나" 출력

 

sb와 sb2 모두 같은 StringBuffer인스턴스를 가리키고 있으므로 같은 내용이 출력된다.

 

StringBuffer 문자열 비교

StringBuffer클래스는 String클래스와 다르게 equals메서드가 오버라이딩 되어있지 않아

equals메서드를 사용하여도 등가비교연산자(==)로 비교한 것과 같은 결과를 얻는다.

String sb1 = new StringBuffer("abc");
String sb2 = new StringBuffer("abc");

System.out.println(sb==sb2);		// false
System.out.println(sb.equals(sb2);	// false

반면에 toString( )은 오버라이딩이 되어 있기 때문에 StringBuffer인스턴스를 String으로 바꿀 수 있다.
이렇게 String으로 바꾸어준 후 equals메서드를 사용하면 비교 가능하다.

String s1 = sb1.toString()
String s2 = sb2.toString()

System.out.println(s.equals(s2));	// true

 


그냥 쉽게 생각해서 변경(편집)이 가능한 String 클래스 = StringBuffer 클래스

라고 생각하면 될 것 같다.

'Java' 카테고리의 다른 글

[Java] 상속 (extends)  (0) 2024.10.05
[Java] DAO와 DTO (2)  (0) 2024.10.04
[Java] DAO와 DTO (1)  (3) 2024.10.04
[Java] 프로그래머스 문제 풀이에 유용한 String 메서드  (0) 2024.10.04
[Java] Exception  (0) 2024.10.04