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