๊ด€๋ฆฌ ๋ฉ”๋‰ด

GO SIWOO!

[Java] String, StringBuilder, StringBuffer์˜ ์ฐจ์ด ๋ณธ๋ฌธ

Develop/์ž๋ฐ”(Java)

[Java] String, StringBuilder, StringBuffer์˜ ์ฐจ์ด

gosiwoo 2023. 3. 15. 17:39

๐Ÿ“Œ ๊ฐœ์š”

Java์—์„œ ๋ฌธ์ž์—ด์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋Š” String, StringBuilder, StringBuffer 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋“ค์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

 

 

๐Ÿ“Œ String

String ํด๋ž˜์Šค์™€ StringBuilder, StringBuffer์™€์˜ ์ฐจ์ด๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ผ๋Š” ์ ์— ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ์™„์ „ํžˆ ์ƒ์„ฑ๋œ ํ›„์—๋„ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์•„๋ž˜์™€ ๊ฐ™์ด String ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ ๋ถˆ๋ณ€๊ฐ์ฒด์ธ๊ฐ€?

String str = "์ž๋ฐ” ์ŠคํŠธ๋ง";
str = "java String";

System.out.println(str); 
// java String

์ž๋ฐ” String ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐฉ์‹์€ new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ literal์„ ์ด์šฉํ•œ ๋ฐฉ์‹ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์šฐ์„  new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์—ฌํƒ€ ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐฉ์‹์ธ Heap ์˜์—ญ์— ์ €์žฅ์ด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ literal์„ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด Heap ๋‚ด์˜ String constants Pool์ด๋ผ๋Š” ๊ณณ์— ์ €์žฅ๋˜์–ด String ๊ฐ’์„ ๋ถˆ๋ณ€์„ฑ์„ ์ง€๋‹ˆ๊ฒŒ ํ•˜๊ณ  ๋‹ค๋ฅธ String ๋ณ€์ˆ˜๋ผ๊ณ  ํ•ด๋„ ๊ฐ™์€ ๋‚ด์šฉ์˜ String literal์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด ๊ฐ–์€ ๊ณณ์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

String a = "์ž๋ฐ”";
String b = "์ž๋ฐ”";

System.out.println(a == b);
// true

์œ„์™€ ๊ฐ™์ด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์—ฌ๋„ ๊ฐ™์€ ๋‚ด์šฉ์˜ String literal์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด ๊ฐ™์€ ๊ฐ์ฒด์ด๋‹ค.

String constants Pool์— ๋Œ€ํ•ด ์ถ”๊ฐ€์ ์ธ ๋‚ด์šฉ์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์— ์žˆ๋‹ค.

https://gosiwoo.tistory.com/entry/%EC%9E%90%EB%B0%94Java-Java-String-Pool%EC%9D%B4%EB%9E%80

 

[์ž๋ฐ”(Java)] Java String Pool์ด๋ž€?

๐Ÿ“ŒJava String ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐฉ์‹ Java์˜ String ๊ฐ์ฒด๋Š” ๋‘ ๊ฐ€์ง€ ์ƒ์„ฑ ๋ฐฉ์‹์ด ์žˆ๋‹ค. 1. new ์—ฐ์‚ฐ์ž ์ด์šฉ Heap ์˜์—ญ์— ์กด์žฌ ex) String str = new String("์ŠคํŠธ๋ง"); 2. literal์„ ์ด์šฉํ•œ ๋ฐฉ์‹ String Constant Pool์ด๋ผ๋Š” ์˜์—ญ

gosiwoo.tistory.com

 

 

String์ด ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง์œผ๋กœ์จ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์ง€๋‹Œ๋‹ค

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

2. ๋ณด์•ˆ
๋ถˆ๋ณ€ํ•˜๊ธฐ์— ์•ˆ์ „ํ•˜๋‹ค. String ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ String ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋œ ์ฃผ์†Œ ์ž์ฒด๋ฅผ ๋„˜๊ฒจ๋„ ์•ˆ์ „ํ•˜๋‹ค.

3. String ์บ์‹ฑ
String์˜ ๋ถˆ๋ณ€์„ฑ ๋•๋ถ„์— ๊ฐ์ฒด์˜ hashCode๋ฅผ ํ†ตํ•ด ํ‚ค๋กœ ์‚ฌ์šฉํ•  ๋•Œ String์€ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ์บ์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ“Œ StringBuilder & StringBuffer

StringBuilder์™€ StringBuffer๋Š” String๊ณผ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€๋ณ€์„ฑ์„ ์ง€๋‹Œ๋‹ค.

๊ฐ€๋ณ€์„ฑ์„ ์ง€๋‹ˆ๊ธฐ์— ๋™์ผํ•œ ๊ฐ์ฒด์—์„œ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด์˜ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ๋งŽ๋‹ค๋ฉด StringBuilder์™€ StringBuffer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

 

StringBuilder์™€ StringBuffer๊ฐ€ ๊ฐ€๋ณ€์„ฑ์„ ์ง€๋‹ˆ๋Š” ๋ฌธ์ž์—ด ํด๋ž˜์Šค์ธ ๊ฒƒ์€ ์•Œ๊ฒ ๋Š”๋ฐ ์ด ๋‘˜์€ ์–ด๋–ค ์ฐจ์ด์ ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์„๊นŒ?

StringBuilder์™€ StringBuffer๋Š” ๋™๊ธฐํ™”์˜ ์œ ๋ฌด์—์„œ ์ฐจ์ด (thread-safe์˜ ๋ณด์žฅ)๊ฐ€ ๋‚œ๋‹ค.

StringBuilder๋Š” ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๊ธฐ์— Single Thread ํ™˜๊ฒฝ์—์„œ ๋ณ€ํ™”ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. StringBuilder๋Š” ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๊ธฐ์— ์ฒ˜๋ฆฌ์†๋„๊ฐ€ StringBuffer๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

StringBuilder์™€ ๋ฐ˜๋Œ€๋กœ StringBuffer๋Š” ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜๊ธฐ์— Multi Thread ํ™˜๊ฒฝ์—์„œ ๋ณ€ํ™”ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š”๋ฐ ์ ํ•ฉํ•˜๋‹ค.