๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/JAVA

[Java] 11์ผ์ฐจ : ์ž๋ฐ”์˜ ๊ธฐ๋ณธ API ํด๋ž˜์Šค - String 2

by ๋”ฐ๊ถˆ 2024. 2. 29.

 

 

StringBuilder, StringBuffer

 

String, StringBuilder, StringBuffer ํด๋ž˜์Šค๋Š” ๋ชจ๋‘ Serializable, CharSequence, Comparable ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ตฌํ˜„๋œ final calss ์ด๋‹ค. 

Serializable : ์ง๋ ฌํ™”๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค 

CharSequence : ์ˆœ์„œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค 

Comparable : ์ˆœ์„œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค

๊ฐ€๋ณ€์ ์ธ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์—์„œ ๋ฏธ๋ฆฌ ๊ทธ ํฌ๊ธฐ๋‚˜ ๊ฐ’์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ ์‹œ๊ฐ„์— ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. 

StringBuilder์™€ StringBuffer ํด๋ž˜์Šค๋Š” String๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๋กœ ์ฐจ์ด์ ์€ ๋ฌธ์ž์—ด ๋ฒ„ํผ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. StringBuilder์™€ StringBuffer ํด๋ž˜์Šค๋Š” ์œ ์‚ฌํ•˜์ง€๋งŒ StringBuffer ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋Š” ํ•„์š”์— ๋”ฐ๋ผ `๋™๊ธฐํ™”`๋˜์–ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ •ํ•˜์ง€๋งŒ, StringBuilder๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋™๊ธฐํ™” ๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

 

package ch07.unit04;

/*
 * StringBuilder,StringBuffer
 * :๊ฐ€๋ณ€์ ์ธ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ string ๋ณด๋‹ค ๋น ๋ฆ„
 * :๊ฐ€๋ณ€์ ์ธ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด String ์‚ฌ์šฉ
 * :StringBuilder,StringBuffer์€ ๋งˆ์ง€๋ง‰์— String ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ
 * โ–ถStringBuilder
 * ๋™์‹œ์„ฑ ์ง€์›ํ•˜์ง€ ์•Š์Œ 
 * StringBuffer๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฆ„ 
 * StringBuffer
 * :๋™์‹œ์„ฑ ์ง€์›(๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „) 
 	
 	// ์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ€๋ณ€์ ์ธ ๋ฌธ์ž์—ด์€ StringBuilder ๋“ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.  
 	String s = "java,";
 	s += "html,";
 	s += "css,";
 	s += "javascript";
 */


public class Ex11 {

	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder("korea");
		StringBuilder sb2 = new StringBuilder("korea");
		
		System.out.println(sb);
		System.out.println(sb2);
		
		System.out.println(sb==sb2);
		System.out.println(sb.equals(sb2));
		
		// String ๋ณ€ํ™˜
		String s= sb.toString();
		String s2= sb2.toString();
		System.out.println(s.equals(s2));
		
		s ="koera";
		s2 =new String ("korea");
		
		System.out.println("๋‹ค๋ฅธ๊ฐ์ฒด์™€๋ฌธ์ž์—ด"+s.contentEquals(s2));
		System.out.println("๋‹ค๋ฅธ๊ฐ์ฒด์™€๋ฌธ์ž์—ด๋น„๊ต:"+s.contentEquals(sb));
				

	}

}

 

 

package ch07.unit04;

public class EX12 {

	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		
		System.out.println("๋ฒ„ํผ์˜ํฌ๊ธฐ : " + sb.capacity());
		
		sb.append("์„œ์šธ");
		sb.append("๋ถ€์‚ฐ");
		sb.append("๋Œ€๊ตฌ");
		sb.append("์ธ์ฒœ");
		sb.append("๊ด‘์ฃผ");
		sb.append("๋Œ€์ „");
		sb.append("์šธ์‚ฐ");
		sb.append("์„ธ์ข…");
		sb.append("๊ฒฝ๊ธฐ๋„");
		System.out.println(sb);
		
		System.out.println("๋ฒ„ํผ์˜ํฌ๊ธฐ : " + sb.capacity());
		
		//์ธ์ฒœ ์ธ๋ฑ์Šค(์—†์œผ๋ฉด -1)
		System.out.println(sb.indexOf("์ธ์ฒœ"));
		
		System.out.println(sb.toString().toUpperCase());
		
		//์„œ์šธ ์•ž์— ํ•œ๊ตญ ์ถ”๊ฐ€
		sb.insert(0, "ํ•œ๊ตญ");
		System.out.println(sb);
		
		sb.insert(sb.indexOf("์„ธ์ข…"), "seoul");
		System.out.println(sb);
		sb.insert(sb.indexOf("์„ธ์ข…")+"์„ธ์ข…".length(), "seoul");
		System.out.println(sb);
		
		sb.delete(sb.indexOf("seoul"),sb.indexOf("seoul")+"seoul".length());
		System.out.println(sb);
		
		sb.delete(sb.indexOf("๋Œ€์ „"), sb.length()); // ๋Œ€์ „๋ถ€ํ„ฐ ๋’ค๋กœ ๋ชจ๋‘ 
		System.out.println(sb);
		
		System.out.println("๋ฒ„ํผ์˜ ํฌ๊ธฐ : "+ sb.capacity());

		//๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ฅผ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋กœ 
		
		sb.trimToSize();
		System.out.println("๋ฒ„ํผ์˜ ํฌ๊ธฐ :" + sb.capacity());
		
		//๋ชจ๋‘ ์‚ญ์ œ
		
		sb.delete(0,  sb.length());
		System.out.println("๋ชจ๋‘ ์‚ญ์ œ ํ›„ : "+sb);
		
	}

}

 

 

package ch07.unit04;

public class Ex13 {

	public static void main(String[] args) {
		String s;
		
		//๋‚ด๋ถ€์ ์œผ๋กœ StringBuilder ์‚ฌ์šฉ ํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜
		s = "JAVA"
				+", SPRING"
				+", HTML"
				+", CSS";
			System.out.println(s);
			
			//์„ฑ๋Šฅ์ด ๋งค์šฐ ๋‚˜์จ 
			s = "JAVA";
			s += ", SPRING";
			s += ", HTML";
			s += ", CSS";
			System.out.println(s);
			
			
			//๋ฌธ์ž์—ด์ด ๊ฐ€๋ณ€์ ์ธ ๊ฒฝ์šฐ 
			StringBuilder sb = new StringBuilder();
			sb.append("JVAV");
			sb.append(", SPRING");
			sb.append(", HTML");
			sb.append(", CSS");
			System.out.println(sb);
			
	}

}

 

 

 

๋ฌธ์ž์—ด ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด StringBuffer  ํด๋ž˜์Šค์˜ append() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ String ํด๋ž˜์Šค์™€ ๋น„๊ตํ•˜๋ฉด ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ, StringBuffer  ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐ toString() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•œ String ๊ฐ์ฒด์˜ ์ƒ์„ฑ์„ ๋ฐ˜๋“œ์‹œ ํ•„์š”๋กœ ํ•˜๋ฏ€๋กœ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋” ๋งŽ์€ ์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์˜ ๋‚ญ๋น„๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

String ํด๋ž˜์Šค๋Š” StringBuffer ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ํ†ตํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ ์ž์›์„ ์†Œ๋ชจํ•˜๋ฉฐ, toString()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•˜์—ฌ String ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†๋‹ค. StringBuffer ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฌธ์ž๋‚˜ ๋ฌธ์ž์—ด์˜ ์ถ”๊ฐ€๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ ์œ ๋ฆฌํ•˜๋ฉฐ, ๋‹จ ํ•œ๋ฒˆ์˜ ๋ฌธ์ž์—ด ์ถ”๊ฐ€์— ๋Œ€ํ•˜์—ฌ StringBuffer ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ์‹œ๊ฐ„ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์ง€์› ๋‚ญ๋น„๋ฅผ ์ดˆ๋ž˜ํ•˜๊ฒŒ ๋œ๋‹ค.

 

package ch07.unit04;

public class Ex15 {

	public static void main(String[] args) {
		
		//๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ StringBuffer ์•ˆ์ „ํ•˜์ง€๋งŒ
		// StringBuilder๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์Œ 
		StringBuffer buffer = new StringBuffer();
		StringBuilder builder = new StringBuilder();
		
		new Thread(() -> {
			for(int i=0; i<10000; i++) {
				buffer.append(i);
				builder.append(i);
			}
			
		}).start();
		
		new Thread(() -> {
			for(int i=0; i<10000; i++) {
				buffer.append(i);
				builder.append(i);
			}
			
		}).start();
		
		new Thread ( () -> {
			try {
				Thread.sleep(5000);
				
				System.out.println("StringBuffer :"+buffer.length());
				System.out.println("StringBuilder :"+builder.length());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}).start();
		
	}

}