๐ฏ ๋ชฉํ
- Java์ ๋ฌธ์์ด ํด๋์ค 3๊ฐ์ง๋ฅผ ์ดํดํฉ๋๋ค.
- ๊ฐ ํด๋์ค์ ๊ตฌ์กฐ, ๋๊ธฐํ ์ฌ๋ถ, ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ๋น๊ตํฉ๋๋ค.
- ์ํฉ์ ๋ง๋ ๋ฌธ์์ด ํด๋์ค ์ ํ ๊ธฐ์ค์ ํ์ตํฉ๋๋ค.
๐ Java์ 3๊ฐ์ง ๋ฌธ์์ด ํด๋์ค
| ๊ตฌ๋ถ |
String |
StringBuffer |
StringBuilder |
| ์ ์ฅ ์์ญ |
Heap ๋๋ Constant Pool |
Heap |
Heap |
| ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ |
โ ๋ถ๋ณ (Immutable) |
โ
๊ฐ๋ณ (Mutable) |
โ
๊ฐ๋ณ (Mutable) |
| Thread-Safe |
โ
Yes |
โ
Yes |
โ No |
๐ String ํด๋์ค
โ
ํน์ง
- ๋ถ๋ณ ๊ฐ์ฒด(Immutable): ๋ฌธ์์ด ์์ ์, ์๋ก์ด ๊ฐ์ฒด ์์ฑ
"+" ๋๋ concat() ์ฌ์ฉ ์ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ฐ์ฒด ์์ฑ
- ์์:
String a = "hello";
String b = a + "world"; // a ๊ฐ์ฒด ๋ณ๊ฒฝ ์๋, ์ ๊ฐ์ฒด ์์ฑ
โ
์ฅ์
- ๋ถ๋ณ โ Thread-Safe
- ์ฝ๊ธฐ ์ ์ฉ ์ฌ์ฉ ์ ๋น ๋ฅด๊ณ ์์ ์
โ ๏ธ ๋จ์
- ๋ฌธ์์ด ์ฐ์ฐ์ด ๋ง์ ๊ฒฝ์ฐ ๋งค๋ฒ ์ ๊ฐ์ฒด ์์ฑ โ GC ๋น์ฉ ์ฆ๊ฐ
- ๋ด๋ถ์ ์ผ๋ก
char[] ๋ฐฐ์ด์ ๊ณ์ ์์ฑ/๋ณต์ฌ โ ์ฑ๋ฅ ์ ํ
๐ StringBuffer & StringBuilder ํด๋์ค
โ
๊ณตํต์
- ๊ฐ๋ณ ๊ฐ์ฒด(Mutable): ๋ฌธ์์ด ์์ ์ด ๊ฐ๋ฅ
- ๋ด๋ถ์ ์ผ๋ก
char[] ๋ฐฐ์ด์ ํ์ฅํ์ฌ ๋ฌธ์์ด ๋ณ๊ฒฝ
- ๋ฌธ์์ด ์กฐ์์ด ๋ง์์๋ก ์ฑ๋ฅ ์ฐ์
โ
์ฐจ์ด์
| ํญ๋ชฉ |
StringBuffer |
StringBuilder |
| Thread-Safe |
โ
Yes (๋๊ธฐํ ๋ณด์ฅ) |
โ No (์ฑ๊ธ ์ฐ๋ ๋ ์ ์ฉ) |
| ์๋ |
๋๋ฆผ |
๋น ๋ฆ |
| ์ฌ์ฉ ํ๊ฒฝ |
๋ฉํฐ์ค๋ ๋ |
์ฑ๊ธ์ค๋ ๋ |
โ
์์
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
System.out.println(sb); // hello world
๐ง ์ธ์ ์ด๋ค ํด๋์ค๋ฅผ ์จ์ผ ํ ๊น?
| ์ํฉ |
์ถ์ฒ ํด๋์ค |
| ๋ฌธ์์ด ์กฐ์ ๊ฑฐ์ ์์ / ๋จ์ ์ฝ๊ธฐ |
String |
| ๋ฌธ์์ด ์กฐ์ ๋ง๊ณ , ์ฑ๊ธ ์ค๋ ๋ ํ๊ฒฝ |
StringBuilder |
| ๋ฌธ์์ด ์กฐ์ ๋ง๊ณ , ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ |
StringBuffer |
๐ ๊ฒฐ๋ก
- JDK 1.5 ์ด์ ์๋
"a" + "b" ์ฐ์ฐ์ด ์๋ก์ด String ๊ฐ์ฒด๋ฅผ ๊ณ์ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ด์๊ฐ ์กด์ฌ
- JDK 1.5 ์ดํ
"a" + "b"๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ด๋ถ์ ์ผ๋ก StringBuilder๋ก ๋ณํ
- ๊ทธ๋ฌ๋ ๋ฃจํ ๋ด์์ ๋ฌธ์์ด ๋์ ๋ฑ ๋ฐ๋ณต์ ์ธ ๋ฌธ์์ด ์ฐ์ฐ์ ์ฌ์ ํ ์ฑ๋ฅ ์ด์๊ฐ ์์
โ
ํ์ต ์ ๋ฆฌ
String: ์ฝ๊ธฐ ์ค์ฌ, ๋ณํ์ง ์๋ ๋ฌธ์์ด
StringBuffer: ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์์ ํ ๋ฌธ์์ด ์กฐ์
StringBuilder: ๋น ๋ฅธ ๋จ์ผ ์ค๋ ๋ ๋ฌธ์์ด ์กฐ์์ ์ต์
๐ ์ฑ๋ฅ ๊ธฐ์ค์ผ๋ก๋
StringBuilder > StringBuffer >>> String