추가하고 싶은 값) : 전달받은 값을 문자열로 반환하여 해당 문자열의 마지막에 추가합니다.StringBuffer sb = new StringBuffer();
sb.append("hello").append(13);
System.out.println(sb); // hello13
append()의 인자에는 boolean, char, char[], CharSequence, double, float, int, long, Object, String, StringBuffer 값이 모두 들어갈 수 있다.
삽입할 인덱스, 삽입할 값) : 지정한 인덱스 위치에 입력 값을 문자열로 변환한 후 해당 인덱스 위치에 문자열을 추가합니다.StringBuffer sb = new StringBuffer("hello");
sb.insert(3, "l");
System.out.println(sb); // helllo
StringBuffer sb = new StringBuffer("hello");
sb.delete(0, 3);
System.out.println(sb); // lo
StringBuffer sb = new StringBuffer("hello");
sb.replace(0, 3, "so");
System.out.println(sb); // solo
reverse() : 스트링 버퍼 내의 문자들을 반대 순서로 변경합니다.
StringBuffer sb = new StringBuffer("hello");
sb.reverse();
System.out.println(sb); // olleh
capacity() : StringBuffer 인스턴스의 현재 버퍼 크기를 반환합니다.
StringBuffer sb = new StringBuffer();
System.out.println(sb.capacity()); // 16
sb.append("hello");
System.out.println(sb.capacity()); // 21
StringBuffer와 같습니다.
둘의 차이점을 얘기하기 전에 굳이 String클래스가 있는데 StringBuilder와 StringBuffer가 있는 이유가 무엇인지부터 생각해봅시다.
먼저 String과 다른 클래스(StringBuffer, StringBuilder)의 차이점은 두 문자열 클래스의 아주 기본적인 차이는 String은 immutable(불변), StringBuffer는 mutable(변함)에 있습니다.
String 객체에 + 연산자를 통해 다른 문자열을 붙여 만드는 경우 기존 클래스에 이어 붙이는 것이 아닌 새로운 String 객체를 생성하게 됩니다.
String 객체는 이러한 이유로 문자열 연산이 많은 경우, 그 성능이 좋지 않습니다.
이러한 성능적 면에서 StringBuffer와 StringBuilder가 생겨나게 되었습니다.
StringBuffer와 StringBuilder 모두 문자열 연산으로 기존 객체의 공간이 부족해지면 기존의 버퍼 크기를 늘리며 유연하게 동작하며, 제공하는 메소드 또한 동일합니다.
단, 둘의 차이점은 동기화여부 입니다.
단일스레드 환경이라면 StringBuilder를 사용하는 것이 좋습니다. 단일 스레드환경에서 StringBuffer를 사용한다고 문제가 되는 것은 아니지만, 동기화 관련 처리로 인해 StringBuilder에 비해 성능이 좋지 않습니다.
단순 성능상으로만 비교한다면 연산이 많은 경우 StringBuilder > StringBuffer > String