String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽기만 하고 변경할 수 없습니다. 즉, 불변 이다.
StringBuffer 클래스는 그 값을 변경할 수도 있고, 추가할 수도 있다.
그게 가능한 이유는 StringBuffer 클래스는 내부적으로 버퍼라는 독립공간을 가지는데, 인스턴스 생성 시에 사용자가 설정한 크기보다 항상 16개의 문자를 더 저장할 수 있는 크기로 생성된다.
만약, 문자열을 합쳐야 될 경우, String을 사용하여 붙이면 항상 새로운 인스턴스가 생성되기 때문에 공간이 낭비되고, 속도도 느리기 때문에 비효율적이다. StringBuffer를 사용하면 문자열을 바로 추가가능하고 속도도 빨라진다.
하지만 String을 자주사용하는 이유는 멀티 스레드 환경에서 객체가 변화하는 상황이라면 불변 인스턴스를 사용하는 것이 낫기 때문이다. 각각의 객체가 서로에게 영향을 주어서는 안 되는 경우에 불변 인스턴스를 사용하면 신뢰를 높일 수 있다.
StringBuffer의 대표적인 메소드
- append()
인수로 전달 된 값을 문자열로 변환 후, 해당 문자열의 마지막에 추가된다.
String의 concat()메소드와 비슷하지만, 속도가 훨씬 빠르다.
public static void main(String[] args) {
StringBuffer str = new StringBuffer("스트링버퍼");
System.out.println(str);//스트링버퍼
str.append("어펜드");
System.out.println(str);//스트링버퍼어펜드
}
- capacity()
StringBuffer 인스턴스의 현재 버퍼 크기를 반환한다. 버퍼의 크기를 알 때 좋다.
StringBuffer str = new StringBuffer("스트링버퍼");
System.out.println(new StringBuffer().capacity());//16
System.out.println(str.capacity());//21
- delete(int start,int end)
delete()메소드는 start부터 end 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거한다.
deleteCharAt()메소드를 사용하면 특정 위치의 문자 한 개만을 제거할 수도 있다.
StringBuffer str1 = new StringBuffer("스트링버퍼");
System.out.println(str1.delete(0, 3));//버퍼
System.out.println(str1.deleteCharAt(1));//버
- insert()
인수로 전달된 값을 문자열로 변환 후, 해당 문자열의 지정된 인덱스 위치에 추가합니다.
전달된 값이 boolean,long,double같은 타입도 가능
append()는 문자열의 마지막에 추가하는거고 insert는 원하는 인덱스뒤에 추가하는것이다.
StringBuffer str2 = new StringBuffer("스트링버퍼");
System.out.println(str2.insert(2, "초"));//스트초링버퍼
'Java > Spring' 카테고리의 다른 글
[eGovFramework] 폼 검증(Form validation)하기 (0) | 2020.06.15 |
---|---|
Math 클래스 (0) | 2020.05.25 |
[JSTL] import (0) | 2020.05.22 |
제네릭(Generic) (0) | 2020.05.20 |
자바 쓰레드(Thread) (0) | 2020.05.20 |
댓글