Java์์ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ํด๋์ค๋ String์ ๋๋ค.
ํ์ง๋ง ์ฑ๋ฅ, ๋๊ธฐํ ์ฌ๋ถ, ์์ ๊ฐ๋ฅ์ฑ ๋ฑ์ ๋ฐ๋ผ StringBuilder, StringBuffer๋ ํจ๊ป ์์๋๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์ด ์ธ ๊ฐ์ง ๋ฌธ์์ด ํด๋์ค์ ์ฐจ์ด์ ๊ณผ ์ํฉ์ ๋ฐ๋ฅธ ์ ์ ํ ์ ํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
โ String
String์ Java์์ ๋ฌธ์์ด์ ํํํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํด๋์ค์ ๋๋ค.
๋ถ๋ณ ๊ฐ์ฒด(immutable) ์ด๊ธฐ ๋๋ฌธ์, ํ ๋ฒ ์์ฑ๋ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์์ ์ด ํ์ํ ๊ฒฝ์ฐ, ๊ธฐ์กด ๊ฐ์ฒด๋ ๊ทธ๋๋ก ๋๊ณ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.
String str1 = "hello";
str1 += " world"; // ์๋ก์ด ๋ฌธ์์ด ๊ฐ์ฒด ์์ฑ
์ ์ฝ๋๋ "hello"์ "hello world" ๋ ๊ฐ์ ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑํ๊ฒ ๋ฉ๋๋ค.
๐ ํน์ง
- ๊ฐ์ด ์ ๋ ๋ณ๊ฒฝ๋์ง ์์
- ๋ฌธ์์ด ์ฐ์ฐ์ด ๋ง์์๋ก ์ฑ๋ฅ ์ ํ ๋ฐ์
- + ์ฐ์ฐ์ ์ปดํ์ผ๋ฌ์ ์ํด StringBuilder๋ก ๋ณํ๋ ์ ์์
String Pool
Java๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ ์ํด String Pool์ด๋ผ๋ ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํฉ๋๋ค.
๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ด ํ์ ์ ์ฅ๋๊ณ , ๋์ผํ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
String str1 = "Hello"; // String Pool์ "Hello" ์์ฑ
String str2 = "Hello"; // ์ด๋ฏธ ํ์ ์๋ "Hello"๋ฅผ ์ฌ์ฌ์ฉ
String str3 = new String("Hello"); // ํญ์ ์ ๊ฐ์ฒด ์์ฑ (ํ ๋ฉ๋ชจ๋ฆฌ)
System.out.println(str1 == str2); // true (๊ฐ์ ๊ฐ์ฒด ์ฐธ์กฐ)
System.out.println(str1 == str3); // false (๋ค๋ฅธ ๊ฐ์ฒด ์ฐธ์กฐ)
์ฅ์
- ๋ถ๋ณ์ฑ์ผ๋ก ์ธํด ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์
- ํด์์ฝ๋ ์บ์ฑ ๋๋ถ์ HashMap, HashSet ๋ฑ์์ ์ฑ๋ฅ ์ฐ์
- ์ค์ํ ๋ฌธ์์ด ๋ฐ์ดํฐ๊ฐ ์ฐ๋ฐ์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ฐฉ์ง
๋จ์
- ๋ฌธ์์ด์ ์์ฃผ ์์ ํ๋ ์์ ์์ ๋นํจ์จ์
- ๋ง์ ์์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉฐ, GC ๋ถ๋ด ์ฆ๊ฐ
๐งฑ StringBuilder
StringBuilder๋ ๋ฌธ์์ด์ ์ง์ ์์ ํ ์ ์๋ ๊ฐ๋ณ ๊ฐ์ฒด์ ๋๋ค.
append(), insert(), delete() ๋ฑ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ฉฐ, ์๋๊ฐ ๋น ๋ฅด๊ณ ๊ฐ๋ณ์ต๋๋ค.
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
System.out.println(sb); // hello world
๐ ํน์ง
- ๋ด๋ถ ๋ฒํผ์์ ๋ฌธ์์ด์ ์ง์ ์์
- ๋๊ธฐํ ๋ฏธ์ง์ → ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์ ์ ํฉ
- ๋ฌธ์์ด ์ฐ์ฐ์ด ๋ง์์๋ก String๋ณด๋ค ํจ์ฌ ๋น ๋ฆ
์ฃผ์ ๋ฉ์๋
StringBuilder sb = new StringBuilder();
// ๋ฌธ์์ด ์ถ๊ฐ
sb.append("Hello");
sb.append(" ").append("World");
// ๋ฌธ์์ด ์ฝ์
sb.insert(5, " Beautiful"); // "Hello Beautiful World"
// ๋ฌธ์์ด ์ญ์
sb.delete(5, 15); // "Hello World"
// ๋ฌธ์์ด ๋์ฒด
sb.replace(0, 5, "Hi"); // "Hi World"
// ๋ฌธ์์ด ์ญ์
sb.reverse(); // "dlroW iH"
// ์ต์ข
String์ผ๋ก ๋ณํ
String result = sb.toString();
์ฅ์
- ๋ฌธ์์ด ์กฐ์์ด ๋ง์ ๊ฒฝ์ฐ ํ์ํ ์ฑ๋ฅ
- ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ํจ์จ ์ฐ์
๋จ์
- ์ค๋ ๋ ์์ ์ฑ ์์: ๋์ ์ ๊ทผ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์
- ๋จ์ํ ๋ฌธ์์ด ์ฐ๊ฒฐ์๋ ์คํ๋ ค ์ด๊ธฐ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์
๐งต StringBuffer
StringBuffer๋ StringBuilder์ ๊ฑฐ์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง,
๋ชจ๋ ๋ฉ์๋๊ฐ synchronized๋ก ์ฒ๋ฆฌ๋์ด ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
StringBuffer sbf = new StringBuffer("hello");
sbf.append(" world");
System.out.println(sbf); // hello world
๐ ํน์ง
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๊ณต์ ๋๋ ๋ฌธ์์ด ์ฒ๋ฆฌ์ ์ ํฉ
- StringBuilder๋ณด๋ค ์๋์ ์ผ๋ก ๋๋ฆฌ์ง๋ง ๋๊ธฐํ๋ก ์์ ์ฑ ํ๋ณด
์ฅ์
- ์ค๋ ๋ ์์ ์ฑ ๋ณด์ฅ
- StringBuilder์ฒ๋ผ ๊ฐ๋ณ์ ์กฐ์ ๊ฐ๋ฅ
๋จ์
- ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์์ ๋๋ฆด ์ ์์
- ๋๊ธฐํ๋ก ์ธํ ์ค๋ฒํค๋ ๋ฐ์
๐ ๋น๊ต ์ ๋ฆฌ
ํญ๋ชฉ | String | StringBuilder | StringBuffer |
๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ | โ ๋ถ๋ณ | โ ๊ฐ๋ณ | โ ๊ฐ๋ณ |
์ฐ๋ ๋ ์์ ์ฑ | โ (๋ถ๋ณ์ด๋ผ ์์ ) | โ (๋น๋๊ธฐ) | โ (๋๊ธฐํ ์ง์) |
์ฑ๋ฅ | ๋๋ฆผ | ๋น ๋ฆ | ์ค๊ฐ |
์ฌ์ฉ ํ๊ฒฝ | ์ผ๋ฐ ๋ฌธ์์ด ์ฒ๋ฆฌ | ๋จ์ผ ์ค๋ ๋ ์ฐ์ฐ ๋ง์ ๊ฒฝ์ฐ | ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ |
๐ก ์ธ์ ์ด๋ค ๊ฑธ ์จ์ผ ํ ๊น?
String์ ์ฌ์ฉํด์ผ ํ ๋
- ๋ฌธ์์ด ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ
- ๋ฌธ์์ด ์ฐ์ฐ์ด ์ ์ ๊ฒฝ์ฐ
- ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์์ ๋์ผํ ๋ฌธ์์ด์ ๊ณต์ ํด์ผ ํ๋ ๊ฒฝ์ฐ
StringBuilder๋ฅผ ์ฌ์ฉํด์ผ ํ ๋
- ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์์ ๋ฌธ์์ด์ ์์ฃผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ
- ๋ฌธ์์ด ์ฐ๊ฒฐ, ์ญ์ , ์ฝ์ ๋ฑ์ ์กฐ์์ด ๋ง์ ๊ฒฝ์ฐ
- ์ต๋ ์ฑ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ
StringBuffer๋ฅผ ์ฌ์ฉํด์ผ ํ ๋
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ํ๋์ ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ์ฌ ์กฐ์ํด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ค๋ ๋ ์์ ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ
๐ ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ๊ธ์์๋ Java์ ๋ฌธ์์ด ์ฒ๋ฆฌ ํด๋์ค์ธ String, StringBuilder, StringBuffer์ ํน์ง๊ณผ ์ฐจ์ด์ ์ ์ดํด๋ณด์์ต๋๋ค.
๋ฌธ์์ด์ ๋ค๋ฃฐ ๋๋ ๋ฌด์กฐ๊ฑด String๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ, ํ๋ก๊ทธ๋จ์ ์ํฉ์ ๋ฐ๋ผ ๊ฐ์ฅ ์ ์ ํ ๋ฌธ์์ด ํด๋์ค๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๋ถ๋ณ์ฑ์ ์ํ๋ค๋ฉด String
- ๋น ๋ฅธ ์ฑ๋ฅ์ด ํ์ํ๋ค๋ฉด StringBuilder
- ์ฐ๋ ๋ ์์ ์ฑ์ด ์ค์ํ๋ค๋ฉด StringBuffer
๋ฌธ์์ด์ Java์์ ๋งค์ฐ ๋น๋ฒํ๊ฒ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ์ด๋ฏ๋ก,
๊ฐ ํด๋์ค์ ํน์ฑ์ ์ดํดํ๊ณ ์ํฉ์ ๋ง๊ฒ ์ ํํ๋ ๊ฒ์ด ํจ์จ์ ์ธ ์ฝ๋ ์์ฑ์ ํต์ฌ์ ๋๋ค.
๋ค์ ๊ธ์์๋ Java ์ปฌ๋ ์ ํ๋ ์์ํฌ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๊ถ๊ธํ ๋ด์ฉ์ด๋ ์ถ๊ฐ๋ก ์๊ณ ์ถ์ ๊ฐ๋ ์ด ์๋ค๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์ ๐