문자열을 저장하는 String 객체는 내부의 문자열을 수정할 수 없다.
(새로운 문자열을 리턴한다.)
String 객체 + 연산을 할 경우도 마찬가지이다.
String data = “ABC”;
data += “DEF”
String 객체는 내부 데이터를 수정할 수 없으므로
“ABC” 에 “DEF”가 추가된 “ABCDEF” 라는 새로운 String 객체가 생성된다.
data 변수는 새로 생성된 String 객체를 참조하게 된다.
+ 연산자를 사용한 만큼 String 객체 수가 늘어나기 때문에 성능을 느리게 할 수 있다.
따라서 문자열 변경 작업이 많을 경우,
java.lang 패키지의 StringBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋다.
이 두 클래스는 내부 버퍼(buffer : 데이터를 임시로 저장하는 메모리)에 문자열을 저장해 두고,
그 안에서 추가, 수정, 삭제 작업을 할 수 있도록 설계되어 있다.
즉, String 처럼 새로운 객체를 만들지 않고 문자열을 조작할 수 있다.
StringBuffer와 StringBuilder 의 사용 방법은 동일하다.
- 차이점
StringBuffer : 멀티 스레드 환경에서 사용할 수 있도록 동기화가 적용되어 있어 스레드에 안전하다.
StringBuilder : 단일 스레드 환경에서만 사용할 수 있도록 설계되어 있다.
StringBuilder 클래스는 몇 가지 생성자를 제공한다.
- 기본 생성자 StringBuilder() : 16개의 문자들을 저장할 수 있는 초기 버퍼를 만든다.
- StringBuilder(int capacity) 생성자
capacity 로 주어진 개수만큼 문자들을 저장할 수 있는 초기 버퍼를 만든다.
StringBuilder(String str) 생성자
str 로 주어진 매개값을 버퍼의 초기값으로 저장한다.
StringBuilder 는 버퍼의 크기가 부족할 경우 자동으로 버퍼 크기를 늘리기 때문에,
초기 버퍼 크기는 중요하지 않다.
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(16);
StringBuilder sb = new StringBuilder(“Java”);
StringBuilder 객체가 생성되었다면 버퍼 내에서 문자 추가, 삽입, 삭제 등의 작업을 아래 메소드로 수행할 수 있다.
메소드 |
설명 |
append(...) |
문자열 끝에 주어진 매개값을 추가 |
insert(int offset, ...) |
문자열 중간에 주어진 매개값을 추가 |
delete(int start, int end) |
문자열의 일부분을 삭제 |
deleteCharAt(int index) |
문자열에서 주어진 index의 문자 삭제 |
replace(int start, int end, String str) |
문자열의 일부분을 다른 문자열로 대치 |
StringBuilder reverse() |
문자열의 순서를 뒤바꿈 |
setCharAt(int index, char ch) |
문자열에서 주어진 index의 문자를 다른 문자로 대치 |
append(), insert() 메소드는 매개 변수가 다양한 타입으로 오버로딩되어 있기 때문에
대부분의 값을 문자로 추가 또는 삽입할 수 있다.
예) StringBuilderExample.java : 문자열 조작
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(); // StringBuilder 객체 생성
sb.append(“Java ”); // 문자열을 끝에 추가
sb.append(“Program Study”);
System.out.println(sb.toString());
sb.insert(4, “2”); // 4번째 문자 뒤에 2 삽입
System.out.println(sb.toString());
sb.setChar(4, ‘6’); // 4번째 문자 뒤의 문자를 6으로 변경
System.out.println(sb.toString());
sb.replace(6, 13, “Book”); // 6번째 문자 뒤부터 13번째 문자까지 “Book” 으로 대치
System.out.println(sb.toString());
sb.delete(4, 5); // 5번째 문자 삭제
System.out.println(sb.toString());
int length = sb.length(); // 총 문자 수 얻기
System.out.println(“총 문자수 : ” + length);
String result = sb.toString(); // 버퍼에 있는 것을 String 타입으로 리턴
System.out.println(result);
}
}
* StringBuffer 는 스레드 파트에서!!
'Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어] > 9. 기본 API 클래스' 카테고리의 다른 글
11. Java 자바 [API] - Arrays 클래스 (0) | 2020.09.29 |
---|---|
10. Java 자바 [API] - 정규 표현식, Pattern 클래스 (0) | 2020.09.24 |
8. Java 자바 [API] - StringTokenizer 클래스 (0) | 2020.09.24 |
7. Java 자바 [API]- String 클래스 (0) | 2020.09.24 |
6. Java 자바 [API] - Class 클래스 (0) | 2020.09.22 |