StringBuffer

홍정완·2022년 8월 8일
0

lay the ground work

목록 보기
4/18
post-thumbnail

StringBuffer 클래스는 내부적으로 버퍼(buffer)라고 하는 독립적인 공간을 가진다.
버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이며, 생성자를 통해 그 크기를 별도로 설정할 수도 있다.

하지만 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성된다.


덧셈(+) 연산자를 이용해 String 인스턴스의 문자열을 결합하면, 내용이 합쳐진 새로운 String 인스턴스를 생성한다. 따라서 문자열을 많이 결합하면 결합할수록 공간의 낭비뿐만 아니라 속도 또한 매우 느려지게 된다.

이럴 경우 StringBuffer 인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없으며 속도도 매우 빨라진다.



Immutable class, Mutable class


String 클래스와 같이 인스턴스가 한 번 생성되면 그 값을 변경할 수 없는 클래스를 불변 클래스(immutable class)

StringBuffer 클래스와 같이 자유롭게 인스턴스의 값을 변경할 수 있는 클래스를 가변 클래스(mutable class)


String 클래스와 같은 불변 클래스는 StringBuffer 클래스의 append()나 insert() 메서드와 같이 값을 변경하는 set 메서드를 포함하지 않는다.


불변 클래스(immutable class)를 사용하는 이유는 멀티 스레드 환경에서 객체가 변화되는 상황이라면 불변 인스턴스를 사용하는 것이 좀 더 신뢰할 수 있는 코드를 작성할 수 있기 때문이다.


즉, 하나의 객체에 접근하면서 각각의 객체가 서로 영향을 주어서는 안 되는 경우에 불변 인스턴스를 사용하면 값이 변하지 않는다는 점이 보장된다.



append()


  • 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 마지막에 추가

String 클래스의 concat() 메서드와 같은 결과를 반환하지만, 내부적인 처리 속도가 훨씬 빠르다.


StringBuffer str = new StringBuffer("Java");
System.out.println("원본 문자열 : " + str);

System.out.println(str.append("수업"));
System.out.println("append() 메서드 호출 후 원본 문자열 : " + str);

// 실행 결과
// 원본 문자열 : Java

// Java수업
// append() 메서드 호출 후 원본 문자열 : Java수업



capacity()


  • StringBuffer 인스턴스의 현재 버퍼 크기를 반환

StringBuffer str01 = new StringBuffer();
StringBuffer str02 = new StringBuffer("Java");

System.out.println(str01.capacity());
System.out.println(str02.capacity());

//실행 결과

// 16
// 20

길이가 4인 문자열로 StringBuffer 인스턴스를 생성하면, 기본적으로 생성되는 여유 버퍼 크기인 16에 문자의 길이인 4를 더한 총 20개의 문자를 저장할 수 있는 버퍼가 생성되는 것을 확인할 수 있다.



delete()


  • 전달된 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거
    또한, deleteCharAt() 메서드를 사용하면 특정 위치의 문자 한 개만 제거할 수 있다.

StringBuffer str = new StringBuffer("Java Oracle");
System.out.println("원본 문자열 : " + str);

System.out.println(str.delete(4, 8));
System.out.println(str.deleteCharAt(1));
System.out.println("deleteCharAt() 메서드 호출 후 원본 문자열 : " + str);

// 실행 결과
// 원본 문자열 : Java Oracle

// Javacle
// Jvacle
// deleteCharAt() 메서드 호출 후 원본 문자열 : Jvacle

첫 번째 매개변수로 전달된 인덱스부터 두 번째 매개변수로 전달된 인덱스 바로 앞의 문자까지를 삭제



insert()


  • 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 지정된 인덱스 위치에 추가한다.

이때 전달된 인덱스가 해당 문자열의 길이와 같으면, append() 메서드와 같은 결과를 반환


StringBuffer str = new StringBuffer("Java 만세!!");
System.out.println("원본 문자열 : " + str);

System.out.println(str.insert(4, "Script"));
System.out.println("insert() 메서드 호출 후 원본 문자열 : " + str);

// 실행 결과
// 원본 문자열 : Java 만세!!

// JavaScript 만세!!
// insert() 메서드 호출 후 원본 문자열 : JavaScript 만세!!



replace(), reverse()


  • replace() : 특정 구간의 내용을 원하는 내용으로 대체할 때 사용
  • reverse() : 내용의 순서를 뒤집을 때 사용
StringBuffer replace(int s, int e, String s)
StringBuffer reverse()

public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("01234567890");
		
		sb.reverse();
		System.out.println(sb);
		
		sb.replace(2, 5, "ehpub");
		System.out.println(sb);
	}
    

// 실행 결과

// 09876543210
// 09ehpub543210
profile
습관이 전부다.

0개의 댓글