개발자 미니민의 개발스터디

[JAVA] 자바 - StringBuilder, StringBuffer 클래스

by mini_min

[JAVA]
자바 - StringBuilder
StringBuffer

 

✔️ StringBuilder, StringBuffer

- 두 클래스는 String 과 같이 문자열을 처리하는 클래스지만, 문자열 버퍼를 수정할 수 있는 것이 차이점이다.

- append() 메소드, insert() 메소드 이용해 데이터를 문자열로 변환하여 해당 문자열을 기존 객체의 문자열 버퍼에 추가 & 삽입한다! 

즉, 가변적인 문자열을 처리하는 경우가 아니면, String 클래스를 사용한다.

 

❌ String 은 불변하지만, 스트링빌더와 스트링버퍼는 다름!

⭕ StringBuilder 나 StringBuffer 는 마지막에 String 으로 변환하여 사용

⭕ Stirng 으로 변환하면 성능이 매우 떨어지는 걸, StringBuilder로 처리하면 성능이 매우 우수 🥰

⭕ 하지만, 경우에 따라 스트링 빌더 + toString 하는게 더 시간 낭비 & 자원 낭비일 수 있다.

 

 

⭐ StringBuilder
: 동시성을 지원하지 않음. StringBuffer 보다 빠름

StringBuffer
:동시성 지원

 

StringBuilder sb1 = new StringBuilder("korea");
		StringBuilder sb2 = new StringBuilder("korea");
		
		System.out.println(sb1);
		System.out.println(sb2);
		
		
		System.out.println(sb1 == sb2); //false 주소비교
		System.out.println(sb1.equals(sb2)); //false 주소비교
		
//StringBuilder 와 StringBuffer 의 equals() 는 주소를 비교
//StringBuilder 와 StringBuffer 문자열 비교는 String 으로 변환 후

 

💡스트링빌더 & 스트링버퍼 클래스의 equals() 메소드는 == 연산자와 동일하게 참조 영역을 비교한다.
서로 다른 객체로 생성되어 s1 과 s2는 주소값이 다르고, 만약 문자열을 비교하고 싶으면 string 으로 변환해서 equals() 를 하면 된다.

 

String s1 = sb1.toString();
		String s2 = sb2.toString();
		System.out.println(s1.equals(s2)); //true 문자열 비교
		
		s1 = new String("korea");
		s2 = new String("korea");
		
	System.out.println("다른 객체와 문자열 비교 : " + s1.contentEquals(s2));//트루
	System.out.println("다른 객체와 문자열 비교 : " + s1.contentEquals(sb1));//트루
		//contentEquals = 스트링빌더와 스트링 넘나들며 문자 비교 가능

 

💡 contentEquals
= 해당 메소드는 스트링빌더와 스트링을 넘나들며 문자열을 비교할 수 있다!

 

 

 

✔️ append, insert

스트링빌더와 스트링버퍼에서 문자열을 추가하여 변환할 때 사용하는 메소드다!

추가하는 메소드는 위에 두 개와 같고, insert(삽입 위치, 삽입될 문자열) << 꼭 기억하기!

 

💡 삭제하는 메소드는 delete!!

delete(삭제 위치, 삭제할 크기/길이)

 

//spring 삭제
	//delete(s, e) => s인덱스에서 e-1인덱스까지 삭제
	
	sb3.delete(sb3.indexOf("spring"), sb3.indexOf("spring")+"spring".length());
	System.out.println(sb3);
	
	//java 끝까지 지우기
	sb3.delete(sb3.indexOf("java"), sb3.length());
	System.out.println(sb3);
		
	System.out.println("문자열 길이 : " + sb3.length());
	System.out.println("버퍼의 크기 : " + sb3.capacity());
		
	//버퍼 크기를 문자열 크기로
	sb3.trimToSize();
	System.out.println("버퍼크기 : " + sb3.capacity());
		
	
	//모든 문자열 지우기
	sb3.delete(0, sb3.length());
	System.out.println("문자열길이 : " + sb3.length());

 

 

 

✔️ append, delete, replace 응용

세 가지 메소드를 응용하면, 삭제-바꿈-삭제순차적으로 처리된다.

 

StringBuilder sb = new StringBuilder();
		sb.append("123456789");
		
		sb.delete(0, 3).replace(1, 3, "24").delete(4, 6);
		//456789
		//424789
		//4247	
		System.out.println(sb);
		
		//다 지우기
		sb.delete(0, sb.length());

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기