JAVA - StringBuffer, StringBuilder

jodbsgh·2022년 11월 7일
0

💡"JAVA"

목록 보기
67/67

🕐StringBuffer & StringBuilder

문자열을 이어 붙일 때 String의 경우 Concat(value) 또는 + "value"를 이용해 붙일 수 있다.

StringBufferStringBuilderconcat 혹은 +을 사용하지 않고 문자열을 이어 붙이기 위해 사용하는데 과연 어떤 상황에 적합할까?

String은 불변(immutable)한다. 따라서 값을 변경할 수 없다. .concat 혹은 +을 사용한 값 변경은 기존에 String에 들어있던 값을 버리고 새로 값을 할당하는 것이다. 따라서 concat이나 +를 무분별하게 사용할 경우 속도가 현저히 느려지게 된다.

String에 concat 또는 +를 1000번 이상 하게되면 속도가 너무 느려져 비효율적이므로
StringBufferStringBuilder를 사용하라는 것이다. 이 둘은 값을 버리고 새로 할당하는 것이 아니라 변경하기 때문에 .concat에 비해 독보적으로 빠른 것을 확인할 수 있다.

🕑StringBuffer 와 StringBuilder의 차이

StringBuffer는 공통 메소드가 동기화되므로 멀티 쓰레드 환경에서는 StringBuffer를 사용하는 것이 안전하고 (값이 예상치 못하게 변경되는 것을 방지한다.)

그 외에는 StringBuilder가 성능이 뛰어나기에 StringBuilder를 사용해주면 된다.

🕒StringBuffer & StringBuilder의 주요 메서드

sb.append(value);
// StringBuffer, StringBuilder 뒤에 값을 이어 붙인다. (concat 또는 + 처럼)

sb.insert(index, value);
// 특정 인덱스부터 값을 삽입한다.

sb.delete(index, value);
// 특정 인덱스부터 인덱스까지 값을 삭제한다.

sb.indexOf(value);
// 값이 어느 인덱스에 들어있는지 확인한다.

sb.substring(index1, index2);
// 인덱스부터 인덱스까지 값을 잘라온다.

sb.length();
// 길이 확인

sb.replace(index1,index2, value);
// 인덱스부터 인덱스까지 값으로 변경

sb.reverse();
// 글자 순서를 뒤집는다.

🕓정리

String에서 concat, + 사용 시 속도가 왜 느려지는가?

  • String은 불변(immutable)하기 때문에 concat, + 사용 시 기존 값을 버리고 새로 할당하여 1000번 이상 수행할 경우 급격하게 느려진다.

StringBuffer, StringBuilder를 사용하는 이유는?

  • String에서 concat, + 를 1000번 이상 사용하는 경우 속도가 급격하게 느려지기 때문에 해당 상황에는 변하는(mutable) StringBufferStringBuilder를 사용한다.

StringBuffer, StringBuilder의 차이는?

  • StringBuffer는 공통 메소드 동기화로 인해서 멀티 쓰레드 환경에서만 사용한다.
    그 외에는 StringBuilder를 사용하면 된다.

✅예제

public static void main(String[] args){
	String s = new String("s");
    s = s.concat(" 붙이기");
    s = s + " 붙이기";
    // String은 불변(immutable)하기 때문에
    // 기존 것을 버리고 새로 할당하는 식으로 사용한다.
    
    StringBuffer sbuffer = new StringBuffer("SB");
    sbuffer.append(" 붙이기");
    
    StringBuilder sbuilder = new StringBuilder("SB");
    sbuilder.append(" 붙이기");
    // StringBuffer, StringBuilder는 변하기(mutable) 때문에
    // 기존 것에서 append를 사용해서 값 변경 가능
    
    sbuilder.append("붙이기"); 	  // 삽입
    sbuilder.insert(0, "ASDASD"); 	// 중간에 삽입
	sbuilder.delete(3, 7);		  	// 자르기
    sbuilder.indexOf("ASDB");	  	// index 확인
    sbuilder.substring(0, 4);	  	// 자르기
    sbuilder.length();			  	// 길이 확인
    sbuilder.replace(0, 4, "CCCC"); // 글자 바꾸기(0부터 4번 째 글자를 CCCC로 변경)
    
    System.out.println(sbuilder);
	System.out.println(sbuilder.indexOf("붙이기붙이기"));
	System.out.println(sbuilder.substring(0, 4)); // substring 예제
	System.out.println(sbuilder.reverse()); // 순서 뒤집기
	System.out.println(sbuilder.length()); // length 예제
}
profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글