스트링빌더(StringBuilder)
한 번 생성된 String 클래스의 인스턴스는 여러 개의 문자열을 더할 때, 매번 새로운 인스턴스를 생성해야 한다. 만약 수많은 문자열이 있을 때, 모든 문자열을 더하는 작업이 필요하다면, 인스턴스의 생성 과정은 문자열의 개수만큼 많아지게 된다. 이러한 문제점을 해결할 때 StringBuilder를 사용한다.
StringBuilder의 객체를 생성한 후, append() 메서드를 통해 연결하고자 하는 문자열을 넣어 StringBuilder의 객체를 통해 호출하여 사용한다. 연결 한 뒤, 문자열 변수를 초기화하고자 한다면, toString() 메서드를 통해 할당할 수 있다.
public class StringBuilderEx {
public static void main(String[] args) {
// StringBuilder 객체 생성
StringBuilder stringBuilder = new StringBuilder();
// append()를 통해 문자열 연결
stringBuilder.append("안녕하세요 ").append("홍길동입니다.");
// toString()을 통해 문자열 변수에 할당
String str = stringBuilder.toString();
System.out.println(stringBuilder);
System.out.println(str);
}
}
스트링버퍼(StringBuffer)
String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없다. 이러한 문제점을 해결하기 위해 StringBuffer 클래스의 인스턴스를 사용한다. StringBuffer 클래스의 인스턴스는 값을 수정하거나, 추가할 수 있다.
StringBuffer 클래스는 내부적으로 독립적인 공간 버퍼(Buffer)를 가진다. 버퍼의 크기는 16개의 문자를 저장할 수 있는 크기이며, 생성자를 통해 크기를 설정할 수 있다. 하지만 인스턴스 생성 시 사용자가 설정한 크기보다 16개의 문자를 저장할 수 있는 여유 공간을 가지고 생성한다.
StringBuffer를 사용하는 이유
String 인스턴스의 문자열은 덧셈(+) 연산자로 결합할 수 있다. 이 때, 합쳐진 문자열은 새로운 String 인스턴스를 생성하게 된다. 덧셈 연산자를 통해 문자열과 함께 사용하면 자동으로 문자열 형변환이 이뤄지고 문자열이 결합된다. 즉, 문자열을 결합할수록 공간이 낭비될 뿐만 아니라 실행 속도도 매우 느려지게 된다.
따라서 StringBuffer 인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없으며 속도도 매우 빠르다.
StringBuffer의 메소드
append()
append() 메서드는 전달받은 값을 문자열로 반환하여 해당 문자열의 마지막에 추가한다. 이 메서드는 String 클래스의 concat() 메서드와 같은 결과를 반환하지만, 속도가 훨씬 빠르다.
StringBuffer str = new StringBuffer("Hello");
System.out.println(str); // Hello
System.out.println(str.append(" Java!")); // Hello Java!
System.out.println(str); // Hello Java!
capacity()
capacity() 메서드는 StringBuffer 인스턴스의 현재 버퍼 크기를 반환한다.
StringBuffer str1 = new StringBuffer();
StringBuffer str2 = new StringBuffer("Hello");
StringBuffer str3 = new StringBuffer(" Java!");
// StringBuffer 인스턴스 생성 시, 16글자의 여유 공간을 가지고 생성된다.
System.out.println(str1.capacity()); // 16
System.out.println(str2.capacity()); // 21
System.out.println(str3.capacity()); // 22
delete()와 deleteCharAt()
delete() 메서드는 지정한 인덱스의 해당하는 부분 문자열을 제거한다. 또한, deleteCharAt() 메서드를 사용하여 해당 인덱스의 문자 한 개만 제거할 수도 있다.
StringBuffer str = new StringBuffer("Hello World!");
System.out.println(str); // Hello World!
System.out.println(str.delete(5, 11)); // Hello!
System.out.println(str); // Hello!
System.out.println(str.deleteCharAt(1)); // Hllo!
System.out.println(str); // Hllo!
insert()
insert() 메서드는 지정한 인덱스 위치에 입력 값을 문자열로 변환한 후 해당 인덱스 위치에 문자열을 추가한다. 만약 인덱스의 값이 해당 문자열의 길이와 같으면 append() 메서드와 같은 결과를 반환한다.
StringBuffer str = new StringBuffer("Hello");
System.out.println(str); // Hello
// System.out.println(str.append(" World!"));
System.out.println(str.insert(5, " World!")); // Hello World!
System.out.println(str); // Hello World!
System.out.println(str.insert(5, " Java")); // Hello Java World!
System.out.println(str); // Hello Java World!
'언어(Language) > Java' 카테고리의 다른 글
[Java] 자바 입출력 개념 정리 및 사용법 (print, println, printf, Scanner) (0) | 2022.09.11 |
---|---|
[Java] 자바 연산자(Operator) 종류 및 사용법 정리 (0) | 2022.09.10 |
[Java] 자바 StringTokenizer 클래스 정리 (문자열 분리 토큰) (0) | 2022.09.08 |
[Java] 자바의 문자열 클래스 메서드 종류 및 사용법 (String class method) (0) | 2022.09.07 |
[Java] 자바의 문자열 클래스 정리 (String class, 인스턴스) (2) | 2022.09.06 |