String 클래스와 같은 불변 클래스는 StringBuffer 클래스의 append()나 insert() 메서드와 같이 값을 변경하는 set 메소드를 포함하지 않는다.
멀티 스레드 환경에서 객체가 변화되는 상황이라면 불변 인스턴스를 사용하는 것이 좀 더 신뢰할 수 있는 코드를 작성할 수 있다.
즉, 하나의 객체에 접근하면서 각각의 객체가 서로 영향을 주어서는 안 되는 경우에 불변 인스턴스를 사용하면 값이 변하지 않는다는 점이 보장됩니다.
가변 클래스 (mutable class)
: StringBuffer 클래스와 같이 자유롭게 인스턴스의 값을 변경할 수 있는 클래스
메서드
append() 메서드
append() 메소드는 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 마지막에 추가한다.
이 메소드는 String 클래스의 concat() 메서드와 같은 결과를 반환하지만, 내부적인 처리 속도가 훨씬 빠르다.
▶ StringBuffer.append(String str) : StirngBuffer
append() 메서드의 반환값은 StringBuffer형(자기 자신 this)이고, StringBuffer뒤에는 append() 메서드를 붙일 수 있다. 따라서 메서드 체이닝이 가능하다.
append() 메서드 사용 후 버퍼의 용량과 길이가 늘어났지만 주소는 바뀌지 않은것을 확인할 수 있다.
insert()메서드
insert() 메소드는 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 지정된 인덱스 위치에 추가한다.
이때 전달된 인덱스가 해당 문자열의 길이와 같으면, append() 메소드와 같은 결과를 반환한다.
▶ StringBuffer.insert(int offset, String str) : StrigBuffer - offset : 원하는 위치에 str을 추가하는 메소드
delete()메서드
delete() 메소드는 전달된 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거한다.
또한, deleteCharAt() 메소드를 사용하면 특정 위치의 문자 한 개만을 제거할 수도 있다.
▶ StringBuffer.delete(int start, int end) : StringBuffer
start <= index < end : 마지막 index는 포함하지 않는다
▶ StringBuffer.deleteCharAt(int index) : StringBuffer 특정 위치의 문자 한 개 만을 제거할때 사용한다.