1. StringBuffer 클래스
- String 클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만, StringBuffer 클래스는 변경이 가능하다.
- 내부적으로 문자열을 편집을 위한 공간(buffer)이 있으며, 인스턴스 생성 시, 그 크기를 지정할 수 있다.
- 이때, 크기는 충분히 잡는 것이 좋다.
- StringBuffer(int length) 생성자를 통해 크기를 지정하는데, 만약 무시한다면, 16개의 문자를 저장할 수 있는
크기의 버퍼를 생성한다.
- 아래의 코드는 StringBuffer에 대한 클래스 생성자 구조이다.
public final class StringBuffer implements java.io.Serializable{
private char[] value;
public StringBuffer(int length) {
value = new char[length];
//shared = false;
}
public StringBuffer() {
this(16);
}
public StringBuffer(String str) {
this(str.length()+16);
//append(str);
}
}
( 이때, 문자열이 length의 크기를 넘어선다면, 내부적으로 버퍼의 크기를 늘리는 작업을 한다. )
( 배열의 length는 변경할 수 없으므로, 복사를 통해서 이루어진다. )
1-1. StringBuffer 클래스의 변경
- append() 메서드는 반환타입이 StringBuffer인데 자신의 주소를 반환한다.
- 아래의 코드를 보고 이해하자.
( 자신의 주소를 반환하므로 sb1을 복사하여 sb2에 저장되었다. )
1-2. StringBuffer의 비교
- String 클래스는 equals() 메서드를 오버라이딩 했기 때문에, 등가비교연산자(==)과는 같지 않다.
- 그러나, StringBuffer 클래스는 equals() 메서드를 오버라이딩 하지 않았기 때문에 등가비교연산자(==)와 같다.
- 그래서 StringBuffer 클래스의 객체의 문자열 비교는 toSting()을 통해서 해야한다.
1-3. StringBuffer 클래스의 생성자와 메서드들
- 중요하다고 생각되는 부분만 꼽았다.
(1) StringBuffer append(모든 자료형과 참조형)
(2) int capacity()
(3) StringBuffer delete(int start, int end)
(4) StringBuffer deleteCharAt(int index)
( 지정된 index 위치에 있는 것을 삭제한다. )
(5) StringBuffer insert(int pos, 모든 자료형과 참조형)
(6) StringBuffer replace(int start, int end, String str)
(7) void setCharAt(int index, char ch)
(8) void setLength(int newLength)
(9) String substring(int start) + String substring(int start, int end)
(10) StringBuffer reverse()
- 문자열의 순서를 거꾸로 바꿔준다.
2. StringBuilder 클래스
- StringBuffer는 멀티쓰레드에 안전하도록 동기화되어 있다. 그러나 동기화는 StringBuffer의 성능을
떨어뜨린다.
- 만약 멀티쓰레드가 아닌 프로그램이라면, 동기화는 불필요하게 성능만 떨어뜨린다.
- 그래서 StringBuffer에서 쓰레드의 동기화만 뺀 StringBuilder가 새로 추가되었다.
- StringBuilder는 StringBuffer와 완전히 똑같은 기능으로 작성되어 있어서, 소스 코드에서 StringBuffer 대신
StringBuilder만 바꾸기만 하면 된다.
- 단, 성능을 우선시 한다면, 둘 중 어느 것이 나은지 판단해본다.
다음장
java.lang패키지(6) - Math 클래스 (tistory.com)
java.lang패키지(6) - Math 클래스
1. Math 클래스 - 기본적으로 Math 클래스는 생성자가 private으로 되어 있기 때문에 만들 수 없다. 왜냐하면 인스턴스 변수가 없고 모두 다 static으로 되어 있기 때문이다. - 상수로는 다음과 같다. (1)
kind-coding.tistory.com
'자바 > java.lang 패키지' 카테고리의 다른 글
java.lang패키지(7) - 래퍼(Wrapper) 클래스 (0) | 2021.12.28 |
---|---|
java.lang패키지(6) - Math 클래스 (0) | 2021.12.27 |
java.lang패키지(4) - String 클래스(2) (0) | 2021.12.26 |
java.lang패키지(3) - String 클래스(1) (0) | 2021.12.24 |
java.lang 패키지(2) - Object 클래스(2) (0) | 2021.12.24 |