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

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java] immutableํ•œ String, mutableํ•œ StringBuilder์™€ StringBuffer

์ถœ์ฒ˜

ChatGPT


Immtable vs Mutable ๊ธฐ์ค€

1.Immutable ๊ฐ์ฒด

๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ํ›„์—๋Š” ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด์ด๋‹ค. ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

2. Mutable ๊ฐ์ฒด

๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด. ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ณ„์†ํ•ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

String ํด๋ž˜์Šค : Immtable ๊ฐ์ฒด

String ๊ฐ์ฒด๋Š” ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

ํŠน์ง•

  • ์•ˆ์ „์„ฑ: String์ด ๋ถˆ๋ณ€์ด๊ธฐ ๋•Œ๋ฌธ์—, String ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•ด๋„ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด: ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ์ž๋ฐ”์—์„œ ์ƒ์ˆ˜ ํ’€(Constant Pool)์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ, ๊ฐ™์€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ์žฌ์‚ฌ์šฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "hello"์™€ "hello"๋Š” ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
  • ์„ฑ๋Šฅ ๋ฌธ์ œ: ๋ฌธ์ž์—ด์„ ์ž์ฃผ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…(์˜ˆ: ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ)์€ ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ๋งค๋ฒˆ ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

StringBuilder ํด๋ž˜์Šค : Mutable ๊ฐ์ฒด

StringBuilder ๊ฐ์ฒด๋Š” ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํŠน์ง•

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

 

StringBuffer ํด๋ž˜์Šค : Mutable ๊ฐ์ฒด + Thread-Safe

StringBuffer๋„ StringBuilder์™€ ๊ฐ™์ด ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ณ€ ํด๋ž˜์Šค์ด๋‹ค.

ํŠน์ง•

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

 

์˜ˆ์ œ์ฝ”๋“œ

// Immutable String Example
String str1 = "Hello";
String str2 = str1.concat(" World"); // ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ์ƒ์„ฑ
System.out.println(str1); // ์ถœ๋ ฅ: Hello
System.out.println(str2); // ์ถœ๋ ฅ: Hello World

// Mutable StringBuilder Example
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // ๋™์ผ ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •
System.out.println(sb.toString()); // ์ถœ๋ ฅ: Hello World

// Mutable and Thread-Safe StringBuffer Example
StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" World"); // ๋™์ผ ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •
System.out.println(sbf.toString()); // ์ถœ๋ ฅ: Hello World

 

  • String: ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ์„œ ๋ฌธ์ž์—ด์ด ๋ณ€ํ•˜์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•˜์ง€๋งŒ, ๋ฌธ์ž์—ด์„ ์ž์ฃผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.
  • StringBuilder: ๊ฐ€๋ณ€ ๊ฐ์ฒด๋กœ์„œ ๋ฌธ์ž์—ด์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.
  • StringBuffer: ๊ฐ€๋ณ€ ๊ฐ์ฒด๋กœ์„œ ๋ฌธ์ž์—ด์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

 


ChatGPT ๊ธ€์˜ ์ถœ์ฒ˜

๋ฐฉ๊ธˆ ์„ค๋ช…ํ•œ ๋‚ด์šฉ์˜ ์ถœ์ฒ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ์ž๋ฐ” ๊ณต์‹ ๋ฌธ์„œ:
  2. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„œ์ :
    • "Effective Java" by Joshua Bloch
    • "Java: The Complete Reference" by Herbert Schildt
  3. ์˜จ๋ผ์ธ ์ž์›:

์ด ์ถœ์ฒ˜๋“ค์€ String, StringBuilder, ๋ฐ StringBuffer์˜ ํŠน์„ฑ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.