String, StringBuilder, StringBuffer

String

  • ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด์ด๋‹ค.

    • ์ฆ‰, ๋ฌธ์ž์—ด์„ ์ˆ˜์ •ํ•  ์‹œ ๊ธฐ์กด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค. (๊ธฐ์กด ๋ฉ”๋ชจ๋ฆฌ๋Š” GC์— ์˜ํ•œ ์ œ๊ฑฐ ๋Œ€์ƒ์ด ๋จ)

  • ์ฐธ์กฐํ˜• ํƒ€์ž…์ž„์—๋„ literal๋กœ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•(primitive) ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋“ฏ new ์—†์ด ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ

    • ์ด ๊ฒฝ์šฐ new ๋ฌธ๋ฒ•์„ ํ†ตํ•œ ๋™์  ํ• ๋‹น๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

String์˜ ๋ฆฌํ„ฐ๋Ÿด ํ• ๋‹น๊ณผ ๋™์  ํ• ๋‹น

  • ๋ฆฌํ„ฐ๋Ÿด ํ• ๋‹น

    • Heap ์˜์—ญ์˜ String constant pool ๋‚ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

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

    • ์ฝ”๋“œ ์ƒ์—์„œ๋Š” String์„ literal๋กœ ํ• ๋‹น ์‹œ ๋‚ด๋ถ€์ ์œผ๋กœ String.intern()์ด ํ˜ธ์ถœ๋˜๋Š”๋ฐ, ์ด๋Š” pool ๋‚ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ฃผ์†Œ๊ฐ’์„, ์—†๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ํ›„ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ๋™์  ํ• ๋‹น

    • Heap ๋‚ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

    • ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๋Š” ๊ฒƒ์œผ๋กœ, ๋™์ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์–ด๋„ ์ƒˆ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

StringBuilder

  • ๊ฐ€๋ณ€(mutable) ๊ฐ์ฒด์ด๋‹ค.

  • append๋ฅผ ํ†ตํ•ด ๋ฌธ์ž์—ด์„ ๋”ํ•  ์ˆ˜ ์žˆ๊ณ  ์ด ๊ฒฝ์šฐ ์ฃผ์†Œ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

StringBuffer

  • ๊ฐ€๋ณ€ ๊ฐ์ฒด์ด๊ณ  append๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ Builder์™€ ๋™์ผํ•˜๋‹ค.

  • StringBuilder์™€ ๋‹ฌ๋ฆฌ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ์„ ์œ„ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ๋‹ค.

  • ์†๋„ ๋ฉด์—์„œ๋Š” String, StringBuilder๋ณด๋‹ค ๋А๋ฆฌ๋‹ค.

์ •๋ฆฌ

  • String์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด์ด๋ฉฐ, ๋™์ผ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ ๋™์ผ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ์ด๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ Heap ์˜์—ญ์˜ String constant pool์ด๋‹ค.

  • StringBuilder์™€ StringBuffer๋Š” ๊ฐ€๋ณ€ ๊ฐ์ฒด์ด๋ฉฐ, ์‚ฌ์šฉ๋ฒ•์€ ๋™์ผํ•˜๋‚˜, StringBuffer๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค.

  • ๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด ๋ณ€๋™์ด ์žฆ์•„ String์„ ์‚ฌ์šฉํ•˜๋ฉด Memory Leak์ด ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™์„ ๋•Œ์—๋Š” StringBuilder๋ฅผ, ๊ทธ ์ค‘์—์„œ๋„ ๋™๊ธฐํ™”๋ฅผ ์š”๊ตฌํ•˜๋Š” ์ž‘์—…์ด๋ผ๋ฉด StringBuffer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ๊ฐ€์žฅ ์†๋„๊ฐ€ ๋น ๋ฅธ ๊ฒƒ์€ String์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌธ์ž์—ด ๋ณ€๊ฒฝ์ด ์žฆ์ง€ ์•Š๋‹ค๋ฉด String์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Last updated