본문 바로가기
Java

[Java] StringBuffer, StringBuilder

by happyhelen 2021. 8. 1.

String 객체는 데이터가 변화되면 메모리상의 변화가 많아 속도가 느리다

문자열이 변경되면 기존의 객체를 버리고 새로운 객체를 메모리에 생성하기 때문

(버려진 객체의 메모리는 GC에 의해 회수)

 

이를 보완한 것이 StringBuffer, StringBuilder인데, 데이터가 변경되면 기존의 객체를 재활용해 수정하는 것이 특징

속도는 StringBuilder가 조금 더 빠르지만 데이터안정성은 StringBuffer가 조금 더 좋다

StringBuffer는 멀티 스레드 상태에서 동기화를 지원하고 StringBuilder는 단일 스레드만 지원해서

하나씩 메모리를 받아서 속도는 느려질 수 있지만 데이터가 훼손되거나 누락되는일이 없다

 

많은 데이터를 처리할 때는 속도가 중요하기 때문에 StringBuilder를 사용하는 것이 낫다고 하지만 멀티 스레드 환경에서 돌아갈 경우를 대비해 StringBuffer로 하는 것이 낫다고 한다

 

 

public class No13_StringBuffer$StringBuilder {

	public static void main(String[] args) {
		// StringBuffer
		StringBuffer bf = new StringBuffer("Java");
		System.out.println("bf : "+bf);
		// 이어붙이기 : append()
		bf.append(33);
		System.out.println("bf : "+bf);
		// 데이터 길이측정 : length()
		System.out.println("br.length(): "+bf.length());
		// 중간삽입 : insert(인덱스, 데이터)
		bf.insert(bf.length(), "~~");
		System.out.println(bf);
		// 삭제 : delete(시작인덱스, 끝인덱스)
		bf.delete(2, 5);
		System.out.println(bf);
		
		System.out.println("-------------");
		// StringBuilder (Buffer와 메소드 똑같다)
		StringBuilder sb = new StringBuilder("hello");
		System.out.println(sb);
		sb.append(45);
	}
}

'Java' 카테고리의 다른 글

[Java] 예외처리  (0) 2021.08.02
[Java] Collections(1)_List 인터페이스  (0) 2021.08.02
[Java] 람다식  (0) 2021.08.01
[Java] 추상클래스  (0) 2021.07.29
[Java] 비트연산  (0) 2021.07.29