개념
- StringBuffer는 자바에서 문자열을 다룰 때 사용하는 클래스 중 하나로, 주로 불변한 string객체와는 달리 StringBuffer는 가변객체로 문자열을, 수정,추가,삭제 할 수 있는 기능을 제공한다
주요 특징
가변성
- StringBuffer는 문자열을 수정할 수 있는 가변 객체. 즉 기존 문자열을 변경할 수 있으며 새로운 객체를 생성할 필요가 없음
동기화
- StringBuffer는 여러 스레드에서 동시에 접근할 때 안전하도록 설계되었음. 내부적으로 메서드가 synchronized로 정의되어 있어, 멀티스레드 환경에서도 안전하게 사용 가능
성능
- 문자열을 여러 번 수정해야 할 경우 StringBuffer를 사용하면 성능 향상, String 객체는 불변객체라서 문자열을 수정할 때마다 새로운객체를 생성해야하는 반면, StringBuffer는 내부 버퍼를 사용하여 추가적인 메모리 할당을 줄인다.
주요 메서드
append(String str): 문자열을 끝에 추가
StringBuffer sb = new StringBuffer("Hello"); sb.append(" World"); // sb는 이제 "Hello World"가 됨insert(int offset,String str): 지정한 위치에 문자열 삽입
sb.insert(5, ","); // sb는 이제 "Hello, World"가 됨delete(int start,int end): 지정 범위의 문자열 삭제
sb.delete(5,6); // sb는 이제 "Hello World"가 됨reverse(): 문자열 반전
sb.reverse(); // sb: dlroW olleHtoString(): StringBuffer 객체를 String으로 변환
String str = sb.toString();
public class StringBufferExam {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("hello");
sb.append(" ");
sb.append("world");
System.out.println(sb);
StringBuffer sb2=new StringBuffer();
StringBuffer sb3=sb2.append("hell");
StringBuffer sb4=sb.append("2");
System.out.println("sb: "+sb);
System.out.println("sb4: "+sb4);
System.out.println("sb2: "+sb2);
System.out.println("sb3: "+sb3);
if(sb2==sb3){
System.out.print("sb2==sb3");
}
}
}
문제 설명
StringBufferExam의 randomName메소드는 임의의 이름과 성을 고른 다음, 이들을 조합해서 임의의 이름을 만들어냅니다. 22번째 줄에서 메소드체이닝을 이용해 sb에 firstName, 공백(" "), lastName을 붙이고, 마지막에 toString()을 붙여서 String type의 return을 하도록 만들고 제출해 보세요.
import java.util.Random;
public class StringBufferExam{
public String randomName(){
StringBuffer sb = new StringBuffer();
String[] firstNames = {"Tod", "John", "Michael"};
String[] lastNames = {"Smith", "Brown", "Davis"};
// 0~2 사이 랜덤 숫자 선택
int random1 = new Random().nextInt(3);
String firstName = firstNames[random1];
int random2 = new Random().nextInt(3);
String lastName = lastNames[random2];
StringBuffer sb2=sb.append(firstName).append(" ").append(lastName);
//메소드 체이닝을 이용하여 sb2를 변경하는 동안 sb도 자동으로 업데이트 되고 있음
return sb.toString();
}
public static void main(String[]args) {}
}