본문 바로가기

JAVA/DAY 17 _ 23.09.08

StringBuilder와 StringBuffer

String str1 = "안녕!";
for(int x = 0 ; x < 10 ; x++) {

    str1 += "야옹";
}
System.out.println(str1);
// 안녕, 안녕야옹, 안녕야옹야옹... -> 전부 다른 메모리
// 메모리의 생성, 소멸, 복사가 빈번하게 일어남... 백만으로가면 꽤빡세다구

// StringBuffer와 StringBuilder : 문자열 조작에 유용한 메서드 
// 문자열을 가변하게 조작할 수 있도록 도와주는 클래스임
// append()를 사용하면 문자열을 계속 더하거나 수정할 수 있다!

// ** append()
// StringBuffer나 StringBuilder 객체에 문자열을 추가하는 메서드
// --> 기존 문자열에 새로운 문자열을 덧붙일 수 있음


1. StringBuffer

StringBuffer sb1 = new StringBuffer(1000);	// char이 1000개인 메모리를 생성
sb1.append("하이~");

for(int x = 0 ; x < 10 ; x++) {

    sb1.append("멍");
}
// System.out.println(sb1);		--> 출력만 할거면 이래도 되긴되는데...
String str2 = sb1.toString();	// 어딘가에 또 써야하니까 String으로 변환 필요!
System.out.println(str2);	// 출력 : 하이~멍멍멍멍멍멍멍멍멍멍

 

2. StringBuilder

StringBuilder sb2 = new StringBuilder();

// 문자열 추가
sb2.append("Hello, ");
sb2.append("World!");

// 문자열 삽입
sb2.insert(6, "Java ");

// 문자열 삭제
sb2.delete(12, 17);

// 문자열 대체
sb2.replace(6, 10, "Java");

// 문자열 출력
System.out.println(sb2.toString()); // "Hello, Java World!"

 

// ** 둘의 차이 : 동기화 여부

// 1)
// StringBuffer는 동기화되어 있어 다중 스레드 환경에서 안전하게 사용할 수 있습니다.
// --> 여러 스레드가 동시에 StringBuffer를 조작할 때, 스레드 간 충돌을 방지합니다.

// 2)
// StringBuilder는 동기화되어 있지 않으므로 단일 스레드 환경에서만 안전하게 사용해야 합니다.
// --> 다중 스레드 환경에서 사용할 때 동기화 문제가 발생할 수 있습니다.

'JAVA > DAY 17 _ 23.09.08' 카테고리의 다른 글

API _ 문자열분리  (0) 2023.09.19
API _ math.  (0) 2023.09.19
중요API _ 날짜 ↔ 문자 ↔ 숫자  (0) 2023.09.19
API _ DateClass  (0) 2023.09.19
API _ SystemClass  (0) 2023.09.19