๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[Java-๊ธฐ์ดˆ] String ํด๋ž˜์Šค

by ์ฝ”๋”ฉํ•˜๋Š” ๋ถ•์–ด 2021. 2. 21.
๋ฐ˜์‘ํ˜•

โ–ถ String์„ ์„ ์–ธํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

String์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ด๋ฏธ ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด ์ƒ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค.

์–ธ๋œป ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ, ๋‚ด๋ถ€์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์€ ํฐ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. new ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๋Š” "abc" ๋ฌธ์ž์—ด์„ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ํ•˜์ง€๋งŒ str2="test"์™€ ๊ฐ™์ด ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๋ฌธ์ž์—ด ์ƒ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ์—๋Š” str2๊ฐ€ ๊ธฐ์กด์— ๋งŒ๋“ค์ ธ ์žˆ๋˜ "test"๋ผ๋Š” ๋ฌธ์ž์—ด ์ƒ์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ String str3="test" ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด str2์™€ str3๋Š” ์ฃผ์†Œ ๊ฐ’์ด ๊ฐ™๊ฒŒ ๋œ๋‹ค.

test๋‚˜ 10, 20 ๋“ฑ๊ณผ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒ์ˆ˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ '์ƒ์ˆ˜ ํ’€' ์ด๋ผ ํ•œ๋‹ค.

 

package string;

public class StringTest1 {
	public static void main(String[] args) {
		String str1 = new String("abc");
		String str2 = new String("abc");

		System.out.println(str1 == str2);  // ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งค๋ฒˆ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ str1๊ณผ str2์˜ ์ฃผ์†Œ ๊ฐ’์ด ๋‹ค๋ฆ„
		System.out.println(str1.equals(str2));  // ๋ฌธ์ž์—ด ๊ฐ’์€ ๊ฐ™์œผ๋ฏ€๋กœ true ๋ฐ˜ํ™˜

		String str3 = "abc";
		String str4 = "abc";

		System.out.println(str3 == str4);  // ๋ฌธ์ž์—ด abc๋Š” ์ƒ์ˆ˜ ํ’€์— ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ str3๊ณผ str4๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ ๊ฐ’์ด ๊ฐ™์Œ
		System.out.println(str3.equals(str4));  // ๋ฌธ์ž์—ด ๊ฐ’๋„ ๊ฐ™์œผ๋ฏ€๋กœ true ๋ฐ˜ํ™˜
	}
}

<์‹คํ–‰ ๊ฒฐ๊ณผ>

โ€‹

โ€‹

โ€‹

*String ํด๋ž˜์Šค์˜ final char[ ] ๋ณ€์ˆ˜

๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋ฌธ์ž์—ด์–ผ ๊ตฌํ˜„ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ char[ ] ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž๋ฐ”๋Š” String ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•ด char[ ] ๋ฐฐ์—ด์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

String ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๋‚ด์šฉ์„ ๋ณด๋ฉด private final char value[ ] ๋ผ๊ณ  ์„ ์–ธ๋œ charํ˜• ๋ฐฐ์—ด์ด ์žˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์—์„œ String s = new String("abc")๋ผ๊ณ  ์“ฐ๋ฉด abc๋Š” String ํด๋ž˜์Šค์˜ value ๋ณ€์ˆ˜์— ์ €์žฅ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ๋ณ€์ˆ˜๋Š” final๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. final์€ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ž์—ด์˜ ํŠน์ง•์„ '๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ํ•œ๋‹ค'๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‘ ๊ฐœ์˜ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‘ ๋ฌธ์ž์—ด์ด ์—ฐ๊ฒฐ๋œ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ด ์ƒ์„ฑ๋œ๋‹ค.

package string;

public class StringTest2 {
	public static void main(String[] args) {
		String javaStr = new String("java");
		String androidStr = new String("android");
		System.out.println(javaStr);
		System.out.println("์ฒ˜์Œ ๋ฌธ์ž์—ด ์ฃผ์†Œ ๊ฐ’ : " + System.identityHashCode(javaStr));

		javaStr = javaStr.concat(androidStr);  // ๋ฌธ์ž์—ด javaStr์™€ ๋ฌธ์ž์—ด androidStr๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ javaStr์— ๋Œ€์ž…

		System.out.println(javaStr);
		System.out.println("์—ฐ๊ฒฐ๋œ ๋ฌธ์ž์—ด ์ฃผ์†Œ ๊ฐ’ : " + System.identityHashCode(javaStr));
	}
}

-concat( ) : ๋‘ ๋ฌธ์ž์—ด์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฉ”์„œ๋“œ

concat ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ํ˜•์ด String์ด๋ฏ€๋กœ, String์ด ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์ ธ์„œ ๋ฐ˜ํ™˜๋จ.

์ฆ‰, "javaandroid" ๋ผ๋Š” ์ƒˆ๋กœ์šด String์ด ๋งŒ๋“ค์–ด์ ธ์„œ ๋ฐ˜ํ™˜๋จ !

โ€‹

โ€‹

<์‹คํ–‰ ๊ฒฐ๊ณผ>

-๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€ํ•˜๋ฏ€๋กœ javaStr ๋ณ€์ˆ˜ ๊ฐ’ ์ž์ฒด๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ด ์ƒ์„ฑ๋œ ๊ฒƒ์ด๋‹ค.

โ€‹

โ€‹โ€‹

โ€‹

*StringBuffer์™€ StringBuilder ํด๋ž˜์Šค ํ™œ์šฉํ•˜๊ธฐ

ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ String ํด๋ž˜์Šค๋Š” ํ•œ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๊ทธ ๋‚ด๋ถ€์˜ ๋ฌธ์ž์—ด์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— String ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๊ณ„์† ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŽ์ด ๋‚ญ๋น„๋œ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ StringBuffer์™€ StringBuilder ํด๋ž˜์Šค์ด๋‹ค.

package string;

public class StringBuilderTest {
	public static void main(String[] args) {
		String javaStr = new String("Java");
		System.out.println("javaStr ๋ฌธ์ž์—ด ์ฃผ์†Œ : " + System.identityHashCode(javaStr));  // ์ธ์Šคํ„ด์Šค๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋˜์—ˆ์„๋•Œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ

		StringBuilder buffer = new StringBuilder(javaStr);  // String์œผ๋กœ๋ถ€ํ„ฐ StringBuilder ์ƒ์„ฑ
		System.out.println("์—ฐ์‚ฐ ์ „ buffer ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ : " + System.identityHashCode(buffer));

		buffer.append(" and");  // ๋ฌธ์ž์—ด ์ถ”๊ฐ€
		buffer.append(" android");
		buffer.append(" programming is fun!!!");
		System.out.println("์—ฐ์‚ฐ ํ›„ buffer ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ : " + System.identityHashCode(buffer));

		javaStr = buffer.toString();  // String ํด๋ž˜์Šค๋กœ ๋ฐ˜ํ™˜
		System.out.println(javaStr);
		System.out.println("์—ฐ๊ฒฐ๋œ javaStr ๋ฌธ์ž์—ด ์ฃผ์†Œ : " + System.identityHashCode(javaStr));	
	}
}

<์‹คํ–‰ ๊ฒฐ๊ณผ>

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€