* String, StringBuffer, StringBuilder ์ฐจ์ด์ ๊ณผ ์ฅ๋จ์ .
Java๋ฅผ ์ฌ์ฉํ๋ฉด ์ข ์ข ์ ํ๊ฒ ๋๋ ๋ฌธ์์ด ํด๋์ค๋ค์ ๋๋ค. (๊ธฐ์ ๋ฉด์ ์ ๋ง๋๊ฒ ๋๋ ๋ฌธ์ ์ค ํ๋.)
String, StringBuffer, StringBuilder.. ๋ชจ๋ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ , ๊ด๋ฆฌํ๋ ํด๋์ค์ ๋๋ค.
๊ตณ์ด ์ฌ๋ฌ๊ฐ์ง๋ฅผ ๋ง๋ค์ด๋์ ์ด์ ๋ ๋ฌด์์ผ๊น์.
1) String
๋จผ์ String๊ณผ ๋ค๋ฅธ ํด๋์ค(StringBuffer, StringBuilder)์ ์ฐจ์ด์ ์ ๋ ๋ฌธ์์ด ํด๋์ค์ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ์ฐจ์ด๋ String์ immutable(๋ถ๋ณ), StringBuffer๋ mutable(๋ณํจ)์ ์์ต๋๋ค.
String์ ๋ฌธ์์ด์ ๋ํํ๋ ๊ฒ์ผ๋ก ๋ฌธ์์ด์ ์กฐ์ํ๋ ๊ฒฝ์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฌธ์์ด, ์ซ์, char ๋ฑ์ concatํ ๋๋ StringBuffer, StringBuilder๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋จ, ๋ณต์กํ ๊ฒฝ์ฐ ์๋ฏธ๊ฐ ์๊ณ , ๋จ์ํ ๊ฒฝ์ฐ์๋ ๊ตณ์ด StringBuffer, StringBuilder๋ฅผ ์ฐ์ง ์๊ณ +์ฐ์ฐ์๋ฅผ ํ์ฉํด ์ง์ ํฉ์ง๋ฉด ๋ฉ๋๋ค.
String ๊ฐ์ฒด๋ ํ๋ฒ ์์ฑ๋๋ฉด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ณํ์ง ์์ต๋๋ค. + ์ฐ์ฐ์ ๋๋ concat ๋ฉ์๋๋ฅผ ํตํด ๊ธฐ์กด์ ์์ฑ๋ String ํด๋์ค ๊ฐ์ฒด ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด์ ๋ถ์ฌ๋ ๊ธฐ์กด ๋ฌธ์์ด์ ์๋ก์ด ๋ฌธ์์ด์ ๋ถ์ด๋ ๊ฒ์ด ์๋๋ผ,
์๋ก์ด String ๊ฐ์ฒด๋ฅผ ๋ง๋ ํ, ์ String ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ , ๊ทธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋๋ก ํฉ๋๋ค. (์ฆ, String ํด๋์ค ๊ฐ์ฒด๋ Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ(๊ฐ๋น์ง ์ปฌ๋ ์
์ด ๋์ํ๋ ์์ญ)์ ์์ฑ. ํ๋ฒ ์์ฑ๋ ๊ฐ์ฒด์ ๋ด๋ถ ๋ด์ฉ์ ๋ณํ์ํฌ ์ ์์ต๋๋ค. ๊ธฐ์กด ๊ฐ์ฒด๊ฐ ์ ๊ฑฐ๋๋ฉด Java์ ๊ฐ๋น์ง ์ปฌ๋ ์
์ด ํ์ํฉ๋๋ค.)
String ๊ฐ์ฒด๋ ์ด๋ฌํ ์ด์ ๋ก ๋ฌธ์์ด ์ฐ์ฐ์ด ๋ง์ ๊ฒฝ์ฐ, ๊ทธ ์ฑ๋ฅ์ด ์ข์ง ์์ต๋๋ค.
ํ์ง๋ง, Immutableํ ๊ฐ์ฒด๋ ๊ฐ๋จํ๊ฒ ์ฌ์ฉ๊ฐ๋ฅํ๊ณ , ๋๊ธฐํ์ ๋ํด ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๊ธฐ๋๋ฌธ์(Thread-safe), ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ๊ฐ๋ฅํฉ๋๋ค.
2) StringBuffer์ StringBuilder
๊ทธ๋ผ StringBuffer์ StringBuilder ํด๋์ค๋ฅผ ํ๋ฒ ๋ณผ๊น์?
StringBuffer/StringBuilder๋ String๊ณผ ๋ค๋ฅด๊ฒ ๋์ํฉ๋๋ค.
๋ฌธ์์ด ์ฐ์ฐ ๋ฑ์ผ๋ก ๊ธฐ์กด ๊ฐ์ฒด์ ๊ณต๊ฐ์ด ๋ถ์กฑํ๊ฒ ๋๋ ๊ฒฝ์ฐ,
๊ธฐ์กด์ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๋ฉฐ ์ ์ฐํ๊ฒ ๋์ํฉ๋๋ค. StringBuffer์ StringBuilder ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ ์๋ก ๋์ผํฉ๋๋ค.
๊ทธ๋ผ ๋ ํด๋์ค์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น์? ๋ฐ๋ก ๋๊ธฐํ ์ฌ๋ถ์ ๋๋ค.
- StringBuffer๋ ๊ฐ ๋ฉ์๋๋ณ๋ก Synchronized Keyword๊ฐ ์กด์ฌํ์ฌ, ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ๋๊ธฐํ๋ฅผ ์ง์.
- ๋ฐ๋ฉด, StringBuilder๋ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํ์ง ์์.
๊ทธ๋ ๊ธฐ๋๋ฌธ์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์ด๋ผ๋ฉด ๊ฐ ๋๊ธฐํ ๋ณด์ฅ์ ์ํด StringBuffer๋ฅผ ์ฌ์ฉํ๊ณ ,
๋จ์ผ์ค๋ ๋ ํ๊ฒฝ์ด๋ผ๋ฉด StringBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋จ์ผ ์ค๋ ๋ํ๊ฒฝ์์ StringBuffer๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ์ ์๋์ง๋ง, ๋๊ธฐํ ๊ด๋ จ ์ฒ๋ฆฌ๋ก ์ธํด StringBuilder์ ๋นํด ์ฑ๋ฅ์ด ์ข์ง ์์ต๋๋ค.
String์ ์งง์ ๋ฌธ์์ด์ ๋ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.
StringBuffer๋ ์ค๋ ๋์ ์์ ํ ํ๋ก๊ทธ๋จ์ด ํ์ํ ๋๋, ๊ฐ๋ฐ ์ค์ธ ์์คํ ์ ๋ถ๋ถ์ด ์ค๋ ๋์ ์์ ํ์ง ๋ชจ๋ฅผ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
StringBuilder๋ ์ค๋ ๋์ ์์ ํ์ง ์ฌ๋ถ๊ฐ ์ ํ ๊ด๊ณ ์๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
์ฌ์ค JDK 1.5๋ฒ์ ์ด์ ์์๋ ๋ฌธ์์ด์ฐ์ฐ(+, concat)์ ํ ๋์๋ ์กฐํฉ๋ ๋ฌธ์์ด์ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํ์ฌ ์ฐธ์กฐํจ์ผ๋ก ์ธํด์ ์ฑ๋ฅ์์ ์ด์๊ฐ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ JDK1.5 ๋ฒ์ ์ดํ์๋ ์ปดํ์ผ ๋จ๊ณ์์ String ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๋ผ๋ StringBuilder๋ก ์ปดํ์ผ ๋๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ทธ๋ฆฌํ์ฌ JDK 1.5 ์ดํ ๋ฒ์ ์์๋ String ํด๋์ค๋ฅผ ํ์ฉํด๋ StringBuilder์ ์ฑ๋ฅ์์ผ๋ก ์ฐจ์ด๊ฐ ์์ด์ก์ต๋๋ค. ํ์ง๋ง ๋ฐ๋ณต ๋ฃจํ๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์์ด์ ๋ํ ๋์๋ ๊ฐ์ฒด๋ฅผ ๊ณ์ ์ถ๊ฐํ๋ค๋ ์ฌ์ค์๋ ๋ณํจ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก String ํด๋์ค๋ฅผ ์ฐ๋ ๋์ , ์ค๋ ๋์ ๊ด๋ จ์ด ์์ผ๋ฉด StringBuffer๋ฅผ, ์ค๋ ๋ ์์ ์ฌ๋ถ์ ์๊ด์ด ์์ผ๋ฉด StringBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
๋จ์ํ ์ฑ๋ฅ๋ง ๋๊ณ ๋ณธ๋ค๋ฉด ์ฐ์ฐ์ด ๋ง์ ๊ฒฝ์ฐ, StringBuilder > StringBuffer >>> String ์ ๋๋ค.
์ถ์ฒ: https://12bme.tistory.com/42 [๊ธธ์ ๊ฐ๋ฉด, ๋ค์ ์๋ค.]
์ถ์ฒ: https://12bme.tistory.com/42 [๊ธธ์ ๊ฐ๋ฉด, ๋ค์ ์๋ค.]
์ถ์ฒ: https://12bme.tistory.com/42 [๊ธธ์ ๊ฐ๋ฉด, ๋ค์ ์๋ค.]