StringBuffer는 문자열을 추가하거나 변경할 때 주로 사용하는 자료형.
비슷한 자료형으로는 StringBuilder가 있음. 사용법은 둘이 동일하며, StringBuffer는 멀티 스레드 환경에서 안전하다는 장점이 있고 StringBuilder는 StringBuffer보다 성능이 우수한 장점이 있음.
따라서 동기화를 고려할 필요가 없는 상황에서는 StringBuffer보다는 StringBuilder를 사용하는 것이 유리함.
1) StringBuffer는 append메소드를 통해 문자열을 추가해 나갈 수 있음
StringBuffer sb = new StringBuffer();
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString(); // toString() -> String 자료형으로 변환
System.out.println(result);
>> hello jump to java
String result = "";
result += "hello";
result += " ";
result += "jump to java";
System.out.println(result);
>> hello jump to java
두 예제의 결과는 동일하지만 내부적으로 객체가 생성되고 메모리가 사용되는 과정은 다름.
1)의 경우 StringBuffer객체는 한번만 생성
2)의 경우는 String자료형에 +연산이 있을 때마다 새로운 String객체가 생성됨(문자열 간 + 연산이 있는 경우 자바는 자동으로 새로운 String 객체를 만들어 냄). 즉, 총 4개의 String 자료형 객체가 만들어진 것임.
⚠️ StringBuffer 자료형은 String 자료형보다 무거운 편에 속함. 일반 String을 사용하는 것보다 메모리 사용량도 많고 속도도 느림. 따라서 문자열 추가나 변경등의 작업이 많을 경우에는 StringBuffer를, 문자열 변경 작업이 거의 없는 경우에는 그냥 String을 사용하는 것이 유리❗️
특정 위치에 원하는 문자열 삽입
StringBuffer sb = new StringBuffer();
sb.append("jump to java");
sb.insert(0, "hello "); // 0번째 위치에 "hello "문자열 삽입
System.out.println(sb.toString());
>> hello jump to java
원하는 문자 추출
StringBuffer sb = new StringBuffer();
sb.append("Hello jump to java");
System.out.println(sb.substring(0, 4)); // substring(시작위치, 끝위치)
>> Hell
Ref.
점프 투 자바