[프로그래머스 자바 중급] java.lang 패키지 : 스트링버퍼 클래스(StringBuffer Class)
StringBuffer 클래스
- String 클래스와 달리 StringBuffer 클래스의 인스턴스는 값을 변경하고 추가할 수 있다.
- 내부적으로 버퍼(buffer)라고 하는 독립적인 공간을 가진다.
- 버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이며, 생성자를 통해 그 크기를 별도로 설정할 수 있다.
- 인스턴스 생성 시 사용자가 설정한 크기보다 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성된다.
- java.lang 패키지에 포함되어 제공된다.
불변 클래스(immutable class)와 가변 클래스(mutable class)
- String 클래스와 같이 인스턴스가 한 번 생성되면 그 값을 변경할 수 없는 클래스를 불변 클래스(immutable class)라고 한다.
-
반대로, StringBuffer 클래스와 같이 자유롭게 인스턴스의 값을 변경할 수 있는 클래스를 가변 클래스(mutable class)라고 한다.
- 멀티 스레드 환경에서 객체가 변화되는 상황이라면 불변 인스턴스를 사용하는 것이 좀 더 신뢰할 수 있는 코드를 작성할 수 있다.
- 즉, 각각의 객체가 서로 영향을 주어서는 안 되는 경우에 불변 인스턴스를 사용하면 값이 변하지 않는다는 점이 보장된다.
append() 메소드
- 인수로 전달된 값을 문자열로 변환 후, 문자열의 마지막에 추가.
-
String 클래스의 concat() 메소드와 같은 결과를 반환하지만, 내부적인 처리 속도가 훨씬 빠르다.
-
ex) 한 문자열에 다른 문자열을 추가
StringBuffer str = new StringBuffer("Java"); System.out.println("원본 문자열 : " + str); // 원본 문자열 : Java System.out.println(str.append("수업")); // Java수업 // 원본 인스턴스의 값이 변경 System.out.println("메소드 호출 후 원본 문자열 : " + str); // Java수업
capacity() 메소드
-
StringBuffer 인스턴스의 현재 버퍼 크기를 반환.
-
ex) StringBuffer 인스턴스의 현재 버퍼 크기를 알아보기
StringBuffer str01 = new StringBuffer(); StirngBuffer str02 = new StringBuffer("Java"); System.out.println(str01.capacity()); // 16 System.out.println(str02.capacity()); // 20
- 길이가 4인 문자열로 StringBuffer 인스턴스를 생성하면, 기본적으로 생성되는 여유 버퍼 크기인 16에 문자의 길이를 더한 총 20개의 문자를 저장할 수 있는 버퍼가 생성되는 것을 확인할 수 있다.
delete() 메소드
- 인수로 전달된 인덱스에 해당하는 부분 문자열을 문자열에서 제거
- delete(int start, int end)
- 첫 번째 매개변수로 전달된 인덱스부터 두 번째 매개변수로 전달된 인덱스 바로 앞의 문자까지를 삭제.
-
또한, deleteCharAt(int index) 메소드를 사용하면 특정 위치의 문자 한 개만을 제거할 수도 있다.
-
ex) 문자열의 특정 부분을 제거
StringBuffer str = new StringBuffer("Java Oracle"); System.out.println("원본 문자열 : " + str); // 원본 문자열 : Java Oracle // 인덱스가 4인 위치의 문자부터 7인 문자까지 삭제 System.out.println(str.delete(4, 8)); // Javacle // 인덱스가 1인 위치의 문자 한 개 삭제 System.out.println(str.deleteCharAt(1)); // Jvacle System.out.println("메소드 호출 후 원본 문자열 : " + str); // Jvacle
insert() 메소드
- 인수로 전달된 값을 문자열로 변환한 후, 문자열의 지정된 인덱스 위치에 추가.
-
전달된 인덱스가 문자열의 길이와 같으면, append() 메소드와 같은 결과를 반환.
-
문자열 중간에 다른 문자열을 삽입
StringBuffer str = new StringBuffer("Java 만세"); System.out.println("원본 문자열 : " + str); // 원본 문자열 : Java 만세 // 인덱스가 4인 위치부터 두 번째 매개변수로 전달된 문자열을 추가 System.out.println(str.insert(4, "Script")); // JavaScript 만세 System.out.println("메소드 호출 후 원본 문자열 : " + str); // JavaScript 만세
메소드 체이닝(method chaining)
- 자기 자신의 메소드를 호출하여 자기 자신의 값을 바꿔나가는 것을 메소드 체이닝이라고 한다.
-
StringBuffer 클래스는 메소드 체인 방식으로 사용할 수 있도록 만들어져 있다.
String str2 = new StringBuffer().append("hello").append(" ").append("world").toString();
- StringBuffer 클래스가 가진 toString() 메소드를 이용하여 String 객체로 반환했다.