1. ์๋ฐ์ ์๋ฃํ
String Buffer๋ฅผ ์ค๋ช
ํ๊ธฐ์ ์์ ์๋ฐ์ ์๋ฃํ์๋ ๊ธฐ๋ณธํ(Primitive Type)๊ณผ ์ฐธ์กฐํ(Reference Type)์ด ์๋ค. ๊ธฐ๋ณธํ์ ๊ฐ ์์ฒด๋ฅผ ์ ์ฅํ๋ ํํ๋ก ์ ์ํ, ์ค์ํ, ๋ฌธ์ํ(char), ๋
ผ๋ฆฌํ์ด ๊ธฐ๋ณธํ์ ์ํ๋ค. ๋ฐ๋ฉด, ์ฐธ์กฐํ ์ฃผ์๊ฐ์ ๋ด๊ณ ์์ผ๋ฉฐ, ์ค์ ๋ก๋ ์ฃผ์๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๋ ํํ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐ์ 8๊ฐ์ง ๊ธฐ๋ณธํ(Primitive Type)์ด ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ฐธ์กฐํ์ ์ํ๋ค. ๋ฆฌ์คํธ๋ ๋งต, ์งํฉ์ฒ๋ผ ์ฐ๋ฆฌ๊ฐ ์๋ ์๋ฐ ์ปฌ๋ ์
ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ์๋ฃํ๋ค์ด ์ฐธ์กฐํ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํํ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฅด๋ String๋ ์ฐธ์กฐํ์ ์ํ๋ค.
์ฐธ์กฐํ(Reference Type)
- ํด๋์ค (Class): ์ฌ์ฉ์๊ฐ ์ ์ํ ๊ฐ์ฒด
- ๋ฐฐ์ด (Array): ๋์ผํ ์๋ฃํ์ ๊ฐ๋ค ์งํฉ
- ๋ฆฌ์คํธ(ArrayList) : ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ(index)
- ๋งต(Map) : ํค-๊ฐ ์(key-value pair)์ ์งํฉ(key)
- ์งํฉ(Set) : ์ค๋ณต์ ํ์ฉํ์ง ์๋ ๋ฐ์ดํฐ์ ์งํฉ, ์์x
- ์ธํฐํ์ด์ค (Interface): ๋คํ์ฑ์ ์ ๊ณต
- ์ด๊ฑฐํ (Enum): ํน์ ํ ์งํฉ์ ์์๋ค์ ์ ์ํ ์ด๊ฑฐํ
- ๋ฌธ์์ด (String)
2. StringBuffer์ ์๋์๋ฆฌ
String(๋ฌธ์์ด)์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ๋๋ ํด๋์ค๊ฐ StringBuffer์ด๋ค.
์ฝ๋ฉํ ์คํธ์์ ๋ฌธ์์ด์ ํ๋๋ก ์ฐ๊ฒฐํด์ ๋ฐํํ๋ ๋ฌธ์ ๋ฅผ ํ ๋ StringBuffer ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋๋ ๊ฒ์ ์์ฃผ ๋ณผ ์ ์๋ค.
StringBuffer๋ ๋ฌธ์์ด์ ํจ์จ์ ์ผ๋ก ์์ ํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋๊ตฌ๋ก, ๊ธฐ๋ณธ ์๋ฃํ์ฒ๋ผ ๋จ์ํ ๊ฐ๋ง ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ, ๋ฌธ์์ด ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํด๋์ค์ด๋ค. ์ฆ, StringBuffer๋ฅผ ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ์ฐธ์กฐํ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ ํด๋์ค๋ก ์ดํดํ๋ ๊ฒ์ด ์ ํํ๋ค.
StringBuffer์ ์๋ฆฌ๋ ๋ฌธ์์ด์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ณ๊ฒฝ ๊ฐ๋ฅํ(mutable) ๋ฒํผ(buffer)๋ฅผ ์ฌ์ฉํ๋ค. ์ฆ, ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ ๋ณํ ๋๋ง๋ค ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์์ ํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ฅผ ๊ฐ๋ณ ๋ฌธ์์ด ํด๋์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ฐ๋ฉด String์ ๋ณ๊ฒฝํ ๋ ๋ง๋ค ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ ‘์ด๋ฎคํฐ๋ธ(immutable)ํ๋ค’, ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ ‘๋ฎคํฐ๋ธ(mutable)ํ๋ค’๋ผ๊ณ ํ๋ค.
StringBuffer๋ ์ฑ๋ฅ๊ณผ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ด ์ต์ ํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ๊ฐ ๋ง์ ๋ String ๋ณด๋ค ํจ์จ์ ์ด๋ค.
์๋ฅผ ๋ค๋ฉด, "Hello "์ "World!" ๋ฅผ ๋ถ์ฌ์ ์ถ๋ ฅํ๋ ์ํฉ์ ๊ฐ์ ํด ๋ณด์.
String Buffer๋ ๋ฒํผ์ "Hello "๋ผ๋ ๋ฌธ์์ด๊ณผ "World!"๋ผ๋ ๋ฌธ์์ด์ ์ฐจ๋ก๋ก ๋ถ์ฌ ๋๊ณ , ํ ๋ฒ์ ๋ฐํํ๋ค. StringBuffer๊ฐ ๋ฌธ์์ด์ ํ ๋ฒ์ ๋ฐํํ ๋๋, ๋ด๋ถ ๋ฒํผ์ ์ ์ฅ๋ ๋ฌธ์ ๋ฐฐ์ด์ toString() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ String ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ๋ฐํํ๋ค.
3. StringBuffer ๋ฉ์๋
- append(String str): ๋ฌธ์์ด์ ์ถ๊ฐ
- insert(int offset, String str): ์ง์ ํ ์์น์ ๋ฌธ์์ด์ ์ฝ์
- delete(int start, int end): ์ง์ ํ ๋ฒ์์ ๋ฌธ์์ด์ ์ญ์
- replace(int start, int end, String str): ์ง์ ํ ๋ฒ์์ ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๋์ฒด
- reverse(): ๋ฌธ์์ด์ ์ญ์์ผ๋ก ๋ค์ง๊ธฐ
- toString(): StringBuffer ๊ฐ์ฒด๋ฅผ String์ผ๋ก ๋ณํ(๋ฌธ์์ด๋ก ์ถ๋ ฅํ๊ฑฐ๋ ๋ฆฌํดํ ๋)
- subsring(์์์์น, ๋ ์์น) : ๋ฌธ์์ด์ ์ง์ ํ ๋ฒ์๋ก ์ฌ๋ผ์ด์ฑ
public class StringBufferExample {
public static void main(String[] args) {
// ์ด๊ธฐ ์ฉ๋ 16์ ๋ฒํผ ์์ฑ
StringBuffer sb = new StringBuffer("Hello");
// ๋ฌธ์์ด ์ถ๊ฐ (append)
sb.append(" World"); // "Hello World"
// ๋ฌธ์์ด ์ฝ์
(insert)
sb.insert(6, "Java "); // "Hello Java World"
// ๋ฌธ์์ด ์ญ์ (delete)
sb.delete(6, 11); // "Hello World"
// ๋ฌธ์์ด ๋ค์ง๊ธฐ (reverse)
sb.reverse(); // "dlroW olleH"
System.out.println(sb.toString()); // ์ต์ข
์ถ๋ ฅ: "dlroW olleH"
System.out.println(sb.substring(0, 4)); // ์ต์ข
์ถ๋ ฅ: "dlro"
}
}
4. StringBuffer vs String
StringBuffer sb = new StringBuffer(); // StringBuffer ๊ฐ์ฒด sb ์์ฑ
sb.append("hello");
sb.append(" ");
sb.append("World!");
String result = sb.toString();
System.out.println(result); // "hello World!" ์ถ๋ ฅ
StringBuffer์ append ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ๊ณ์ํด์ ์ถ๊ฐํด ๋๊ฐ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ toString() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด StringBuffer๋ฅผ String ์๋ฃํ์ผ๋ก ๋ณ๊ฒฝํ ์๋ ์๋ค.
๊ฐ์ ์ฝ๋๋ฅผ StringBuffer ๋์ String ์๋ฃํ์ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํด ๋ณด์.
String result = "";
result += "hello";
result += " ";
result += "World!";
System.out.println(result); // "hello World!" ์ถ๋ ฅ
๋ ๋ฒ์งธ ์ฝ๋์ ์ฒซ ๋ฒ์ฌ ์ฝ๋์ ๊ฒฐ๊ณผ๋ ๊ฐ์ง๋ง ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ณผ์ ์๋ ์ฐจ์ด๊ฐ ์๋ค. ์ฒซ ๋ฒ์งธ ์ฝ๋์์๋ StringBuffer ๊ฐ์ฒด๋ฅผ ํ ๋ฒ๋ง ์์ฑํ์ง๋ง, ๋ ๋ฒ์งธ์์๋ String ์๋ฃํ์ + ์ฐ์ฐ์ด ์์ ๋๋ง๋ค ์๋ก์ด String ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฏ๋ก ์ด 4๊ฐ์ String ์๋ฃํ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ค.
๋ String ์๋ฃํ์ ๊ฐ์ด ํ ๋ฒ ์์ฑ๋๋ฉด ๋ณ๊ฒฝํ ์๊ฐ ์๋ค. toUpperCase์ ๊ฐ์ ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ๋ฌธ์์ด์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ฒ๋ผ ์๊ฐํ ์๋ ์์ง๋ง ํด๋น ๋ฉ์๋๋ฅผ ์ํํ ๋ ๋ ๋ค๋ฅธ String ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฆฌํดํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ฉด์ StringBuffer ์๋ฃํ์ ๊ฐ์ ์์ ํด์ ์ฌ์ฉํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฌด์กฐ๊ฑด StringBuffer๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น? ๊ทธ๊ฑด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. StringBuffer ์๋ฃํ์ String ์๋ฃํ๋ณด๋ค ๋ฌด๊ฒ๋ค. new StringBuffer()๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด String์ ์ฌ์ฉํ ๋๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๋ ๋ง๊ณ ์๋๋ ๋๋ฆฌ๋ค. ๋ฐ๋ผ์ ๋ฌธ์์ด์ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ์์
์ด ๋ง์ผ๋ฉด StringBuffer๋ฅผ, ์ ์ผ๋ฉด String์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค.
* String Builder ?
StringBuilder๋ StringBuffer์ ๋น์ทํ ์๋ฃํ์ผ๋ก, ์ฌ์ฉ๋ฒ๋ ๊ฐ๋ค.
StringBuffer๋ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ณ , StringBuilder๋ StringBuffer๋ณด๋ค ์ฑ๋ฅ์ด ์ฐ์ํ๋ค๋ ์ฅ์ ์ด ์๋ค.
๋ฐ๋ผ์ ๋๊ธฐํ๋ฅผ ๊ณ ๋ คํ ํ์๊ฐ ์๋ ์ํฉ์์๋ StringBuffer < StringBuilder
์ฐธ๊ณ ํ ์๋ฃ : Ghat GPT & ๋ฐ์์ฉ, ์ ํํฌ์๋ฐ