์ข์ ์ง๋ฌธ์ด์ผ! StringBuffer๋ ์๋ฐ์์ ๋ฌธ์์ด์ ํจ์จ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํด ์ ๊ณต๋๋ ๊ฐ๋ณ ๋ฌธ์์ด ๊ฐ์ฒด ์ค ํ๋์ผ. ๋ฌธ์์ด์ ์์ฃผ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ, StringBuffer๋ ๋ถ๋ณ ๊ฐ์ฒด์ธ String๋ณด๋ค ์ฑ๋ฅ์ ์ผ๋ก ๋ ์ ๋ฆฌํด.
- StringBuffer๋ ์๋ฐ์์ ๋ฌธ์์ด์ **์์ ๊ฐ๋ฅํ ๊ฐ์ฒด(Mutable Object)**๋ก ๋ค๋ฃฐ ์ ์๋๋ก ๋ง๋ค์ด์ง ํด๋์ค์ผ.
- ๋ฌธ์์ด์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ , ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฑ๋ฅ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ด.
์์: String๊ณผ StringBuffer์ ์ฐจ์ด
// String: ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๊ณ์ ์์ฑ
String str = "Hello";
str = str + " World"; // ์๋ก์ด ๋ฌธ์์ด ๊ฐ์ฒด ์์ฑ ("Hello World")
System.out.println(str); // ์ถ๋ ฅ: Hello World
// StringBuffer: ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์์
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World"); // ๊ธฐ์กด ๊ฐ์ฒด์ ๋ฌธ์์ด ์ถ๊ฐ
System.out.println(sb.toString()); // ์ถ๋ ฅ: Hello WorldString์"Hello World"๋ผ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง๋ง,
StringBuffer๋ ๊ธฐ์กด ๊ฐ์ฒด์" World"๋ฅผ ์ถ๊ฐํ์ด.
- ๊ฐ๋ณ์ฑ(Mutable)
- StringBuffer๋ ๋ฌธ์์ด์ ์์ ๊ฐ๋ฅํ ์ํ๋ก ์ ์งํด.
- ๋ฌธ์์ด์ ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋, ์ญ์ ํ๊ฑฐ๋, ํน์ ์์น์ ์ฝ์ ํ ์ ์์ด.
- ๋๊ธฐํ(Synchronized)
- StringBuffer๋ **์ค๋ ๋-์์ (Thread-Safe)**ํ ํด๋์ค์ผ.
- ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ StringBuffer๋ฅผ ์์ ํด๋ ๋ฌธ์ ๊ฐ ์๋๋ก ์ค๊ณ๋์ด.
- ๊ทธ๋ฌ๋ ๋๊ธฐํ ๋๋ฌธ์ StringBuilder๋ณด๋ค ์กฐ๊ธ ๋๋ฆด ์ ์์ด.
- ์ ์ฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
- StringBuffer๋ ๋ด๋ถ์ ์ผ๋ก **๋ฒํผ(buffer)**๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์์ด ํฌ๊ธฐ๋ฅผ ๊ด๋ฆฌํด.
- ํ์ํ ๋๋ง ํฌ๊ธฐ๋ฅผ ๋๋ ค๊ฐ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ด.
- StringBuffer๋ **๋๊ธฐํ(Synchronized)**๋ฅผ ์ง์ํด์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ด.
- StringBuilder๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์์์, ์ฑ๊ธ ์ค๋ ๋ ํ๊ฒฝ์์ ๋ ๋น ๋ฅด๊ฒ ๋์ํด.
๊ฐ๋จํ ๋น๊ต:
| ํน์ฑ | String | StringBuffer | StringBuilder |
|---|---|---|---|
| ๊ฐ๋ณ์ฑ | ๋ถ๋ณ (Immutable) | ๊ฐ๋ณ (Mutable) | ๊ฐ๋ณ (Mutable) |
| ๋๊ธฐํ | ๋ถํ์ | ๋๊ธฐํ ์ง์ (Thread-Safe) | ๋๊ธฐํ ์์ (๋ ๋น ๋ฆ) |
| ์ฑ๋ฅ | ๋๋ฆผ | ๋๊ธฐํ๋ก ์ฝ๊ฐ ๋๋ฆผ | ๋๊ธฐํ๊ฐ ์์ด ๋น ๋ฆ |
| ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ | ์ ํฉํ์ง ์์ | ์ ํฉ | ์ ํฉํ์ง ์์ |
StringBuffer์๋ ๋ฌธ์์ด์ ๋ค๋ฃจ๊ธฐ ์ํ ๋ค์ํ ๋ฉ์๋๊ฐ ์์ด. ๋ช ๊ฐ์ง ์ ์ฉํ ๋ฉ์๋๋ฅผ ์ดํด๋ณด์:
(1) append(String str)
๋ฌธ์์ด์ ๋์ ์ถ๊ฐ.
StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
System.out.println(sb); // ์ถ๋ ฅ: Hello World(2) insert(int offset, String str)
ํน์ ์์น์ ๋ฌธ์์ด ์ฝ์ .
StringBuffer sb = new StringBuffer("Hello");
sb.insert(5, " Java");
System.out.println(sb); // ์ถ๋ ฅ: Hello Java(3) replace(int start, int end, String str)
ํน์ ๋ฒ์์ ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๊ต์ฒด.
StringBuffer sb = new StringBuffer("Hello World");
sb.replace(6, 11, "Java");
System.out.println(sb); // ์ถ๋ ฅ: Hello Java(4) delete(int start, int end)
ํน์ ๋ฒ์์ ๋ฌธ์์ด ์ญ์ .
StringBuffer sb = new StringBuffer("Hello World");
sb.delete(5, 11);
System.out.println(sb); // ์ถ๋ ฅ: Hello(5) reverse()
๋ฌธ์์ด์ ๋ค์ง๊ธฐ.
StringBuffer sb = new StringBuffer("Hello");
sb.reverse();
System.out.println(sb); // ์ถ๋ ฅ: olleH- ๋ฌธ์์ด์ ์์ฃผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ถ๊ฐ/์ญ์ ํด์ผ ํ ๋.
- ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋ฌธ์์ด ์์ ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํด์ผ ํ ๋.
- StringBuffer๋ ๋ฌธ์์ด์ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ ๊ฐ๋ณ ํด๋์ค์ผ.
- ๋๊ธฐํ ๊ธฐ๋ฅ์ด ์์ด์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ด.
- ํ์ง๋ง ๋๊ธฐํ๊ฐ ํ์ํ์ง ์๋ค๋ฉด StringBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ ๋น ๋ฅด๊ณ ์ ํฉํ ์ ์์ด.
๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด ์ธ์ ๋ ๋ฌผ์ด๋ด! ๐