๐ฏ StringBuilder & StringBuffer๋?
๋ฌธ์์ด์ ์์ ๊ฐ๋ฅ(mutable) ํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์๋ฐ ํด๋์ค์ ๋๋ค.
String
์ ํ ๋ฒ ๋ง๋ค์ด์ง๋ฉด ์์ ํ ์ ์์ง๋ง,StringBuilder
์ StringBuffer
๋ ๊ธฐ์กด ๋ฌธ์์ด์ ์ง์ ์์ ํ ์ ์์ด์.
๐ฅ String๊ณผ ์ฐจ์ด์ ์?
๐ ๊ธฐ๋ณธ ๊ฐ๋ ๋น๊ต
๊ตฌ๋ถ | String | StringBuilder / StringBuffer |
---|---|---|
๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ | โ ๋ถ๋ณ (immutable) | โ ๊ฐ๋ณ (mutable) |
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | ์ ๊ฐ์ฒด ๊ณ์ ์์ฑ | ๊ธฐ์กด ๊ฐ์ฒด ์์ |
์ฑ๋ฅ | ์์ ๋ง์ผ๋ฉด ๋๋ฆผ | ๋น ๋ฆ (์์ ์ ์ต์ ํ) |
โจ ์ฝ๊ฒ ๋งํ๋ฉด
String์ ๋งค๋ฒ ์ ์ข
์ด์ ์๋ก ์ฐ๋ ๋๋.
StringBuilder/StringBuffer๋ ๊ธฐ์กด ์ข
์ด์ ๊ณ ์ณ ์ฐ๋ ๋๋!
๐๏ธ StringBuilder vs StringBuffer
๐ ๋์ ์ฐจ์ด
๊ตฌ๋ถ | StringBuilder | StringBuffer |
---|---|---|
์ค๋ ๋ ์์ ์ฑ | โ ๋น๋๊ธฐ (์ฑ๊ธ ์ค๋ ๋์ฉ) | โ ๋๊ธฐํ (๋ฉํฐ ์ค๋ ๋์ฉ) |
์ฑ๋ฅ | ๋ ๋น ๋ฆ ๐ | ์ฝ๊ฐ ๋๋ฆผ ๐ข |
์ฌ์ฉ ํ๊ฒฝ | ์ฑ๊ธ ์ค๋ ๋ ํ๋ก๊ทธ๋จ | ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋จ |
๐ก ํผ์ ์ฐ๋ฉด StringBuilder,
์ฌ๋ฌ ์ค๋ ๋์ ๊ณต์ ํ๋ฉด StringBuffer๋ฅผ ์ฐ์!
๐งฐ ๋ด๋ถ ๊ตฌ์กฐ
// StringBuilder (StringBuffer์ ๊ฑฐ์ ๋์ผ)
public final class StringBuilder implements java.io.Serializable, CharSequence {
private char[] value;
private int count;
}
value
: ์ค์ ๋ฌธ์๊ฐ ์ ์ฅ๋๋ ๋ฐฐ์ดcount
: ์ ์ฅ๋ ๋ฌธ์ ์
๐๏ธ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
โ ์ฃผ์ ๊ธฐ๋ฅ ์์
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // ๋ฌธ์์ด ์ถ๊ฐ --> Hello World
sb.insert(5, " Java"); // ํน์ ์์น์ ์ฝ์
--> Hello Java World
sb.delete(0, 6); // ์ผ๋ถ ์ญ์ --> Java World
sb.reverse(); // ๋ฌธ์์ด ๋ค์ง๊ธฐ
๐ฅ ์ถ๋ ฅ ๊ฒฐ๊ณผ
dlroW avaJ
๐ ์ฃผ์ ๋ฉ์๋ ์ ๋ฆฌ
๋ฉ์๋ | ์ค๋ช |
---|---|
append(str) | ๋ฌธ์์ด ๋์ ์ถ๊ฐ |
insert(offset, str) | ํน์ ์์น์ ์ฝ์ |
delete(start, end) | ๋ฒ์ ์ญ์ |
replace(start, end, str) | ๋ฒ์ ๊ต์ฒด |
reverse() | ๋ฌธ์์ด ๋ค์ง๊ธฐ |
toString() | ์ต์ข ๊ฒฐ๊ณผ๋ฅผ String์ผ๋ก ๋ณํ |
๐ ์ฃผ์ํ ์ : ์ฉ๋(capacity) ๊ด๋ฆฌ
๐ ์ฉ๋ ์ฆ๊ฐ ๋ก์ง
- ๊ธฐ๋ณธ ์ฉ๋:
16์นธ
- ๋์น๋ฉด
(ํ์ฌ ์ฉ๋ ร 2) + 2
ํฌ๊ธฐ๋ก ์๋ ํ์ฅ๋ฉ๋๋ค.
StringBuilder sb = new StringBuilder();
System.out.println(sb.capacity()); // 16
sb.append("12345678901234567");
System.out.println(sb.capacity()); // 34
์ฝ๊ฒ๋งํด
์์ ๊ณต์ฑ
์ด ๊ฝ ์ฐจ๋ฉด,
๋ ๋ฐฐ ๋๊ฒ ๋ ํฐ ์ ๊ณต์ฑ
์ผ๋ก ๊ฐ์ํ๋ ๋๋์ด์์!
๐ ์ฌํ: StringBuilder ์ต์ ํ (Tuning)
๐ ๏ธ 1. ์ด๊ธฐ ์ฉ๋(capacity) ์ค์ ํ๊ธฐ
๋ฌธ์์ด ํฌ๊ธฐ๊ฐ ๋๋ต ์์๋๋ค๋ฉด, ์ฒ์๋ถํฐ ๋๋ํ๊ฒ ์ฉ๋์ ์ก์์ฃผ์ธ์.
StringBuilder sb = new StringBuilder(100);
๐ก ์ฅ์ : ์ค๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌํ ๋น์ด ์ผ์ด๋์ง ์์ ์ฑ๋ฅ์ด ์ข์์ง๋๋ค.
๐ ๏ธ 2. trimToSize()
๋ก ๋จ๋ ๊ณต๊ฐ ์ค์ด๊ธฐ
์์ ์ด ๋๋ ํ ๋จ์ ์ฌ์ ๊ณต๊ฐ์ ๊น๋ํ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
sb.trimToSize();
๐ก ์ฅ์ : ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ฌ ํจ์จ์ฑ์ ๋์ ๋๋ค.
๐ ๏ธ 3. append() ์ฒด์ด๋ ์ ๊ทน ํ์ฉํ๊ธฐ
- append()๋ฅผ ์ฐ์ ํธ์ถํ ๋ ์ฒด์ด๋ํ๋ฉด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ๋น ๋ฆ ๋๋ค.
- ์ค๊ฐ์ toString() ํธ์ถ์ ์ต๋ํ ํผํ์ธ์.
String result = new StringBuilder()
.append("Hello")
.append(" ")
.append("World")
.toString(); //toString()์ ๊ฐ๋ฅํ๋ฉด ๋ง์ง๋ง์!
๐ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ StringBuffer ์ฃผ์์ฌํญ
๐งฎ StringBuffer๋ ์ ๋ง ์๋ฒฝํ๊ฒ ์์ ํ ๊น?
โ ๋ฉ์๋ ํ๋ํ๋๋ ์์ ํ์ง๋ง,
์ฌ๋ฌ ๋ฉ์๋๋ฅผ์กฐํฉ
ํ ๋๋ ์ฃผ์ํด์ผ ํฉ๋๋ค!
- StringBuffer๋
๊ฐ ๋ฉ์๋๋ง๋ค
๋๊ธฐํ๋์ด ์์ด์. - ํ์ง๋ง ๋ฉ์๋๋ฅผ ์ด์ด์ ์ฌ์ฉํ ๋๋, ๊ทธ ์งง์ ์๊ฐ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ผ์ด๋ค ์ ์์ด์.
๐ ์๋ฅผ ๋ค์ด ๋ณผ๊ฒ์๐
โ๏ธ ์๋ชป๋ ์ฝ๋
if (buffer.length() == 0) {
buffer.append("Hello");
}
length()
๋ก ๊ธธ์ด๋ฅผ ํ์ธํ๊ณ- ๊ทธ ๋ค์
append()
๋ฅผ ํธ์ถํ๋ ์ฌ์ด์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ผ์ด๋ค ์ ์์ด์.
โ ์ฌ๋ฐ๋ฅธ ์ฝ๋
synchronized(buffer) {
if (buffer.length() == 0) {
buffer.append("Hello");
}
}
synchronized
๋ธ๋ก์ผ๋ก ์ ์ฒด ๊ณผ์ ์ ๋ฌถ์ผ๋ฉด, ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ผ์ด๋ค ํ์ด ์์ต๋๋ค.
๐ ๋ง์ฝ
์น๊ตฌ๋ ๊ฐ์ ๋ฌธ์๋ฅผ ํธ์งํ๋ ์ค์ธ๋ฐ,
๋ด๊ฐ โ๋น์ด ์๋์ง ํ์ธํ ํ์ ๊ทธ๋ฆผ์ ์ฐ๋ ค๊ณ โ ํ๋ ์๊ฐ,
๋ค๋ฅธ ์น๊ตฌ๊ฐ ๋จผ์ ๊ทธ ์๋ฆฌ์ ๊ธ์ ์จ๋ฒ๋ฆฌ๋ฉด ๋ด๊ฐ ์ฐ๋ ค๊ณ ํ๋ ๋ด์ฉ์ ์ถฉ๋์ด ๋๊ฑฐ๋ ๋ค์ ์จ์ผ ํ ์๋ ์์ด์.
์ด๋ฐ ์ํฉ์ ๋ง์ผ๋ ค๋ฉด, length()
์ append()
์ฒ๋ผ ์ฐ์๋ ์์
์ ํ๋๋ก ๋ฌถ๊ณ ,
๋ด๊ฐ ์์ ํ๋ ๋์์ ๋ค๋ฅธ ์ฌ๋์ด ๋ผ์ด๋ค ์ ์๋๋ก ์ ๊ฐ๋๋ ๊ฒ ์์ ํด์.**
๐งฎ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ StringBuilder๋ฅผ ์ธ ์ ์์๊น?
๋ค! ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฐ ์ค๋ ๋๊ฐ ์๊ธฐ๋ง์ StringBuilder ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๊ณ
์๋ก ๊ณต์ ํ์ง ์์ผ๋ฉด
๋ฌธ์ ์์ต๋๋ค.
์์
public String buildMessage() {
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append("World");
return sb.toString();
}
- ์ฌ๊ธฐ์๋
sb
๊ฐ ์ด ๋ฉ์๋ ์์์๋ง ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์์ ํด์.
๐ก ๊ณต์ ๋ง ์ ํ๋ฉด, ๋ฌด์กฐ๊ฑด ๋น ๋ฅธ StringBuilder๋ฅผ ์ฐ์! ๐
๐งฉ ์ต์ข ์์ฝ
๊ตฌ๋ถ | ํน์ง | ์ฌ์ฉ ๊ฒฝ์ฐ |
---|---|---|
String | ๋ถ๋ณ ๊ฐ์ฒด, ์ฝ๊ธฐ ์ค์ฌ | ๋ฌธ์์ด์ด ๋ณํ์ง ์์ ๋ |
StringBuilder | ๊ฐ๋ณ ๊ฐ์ฒด, ๋น ๋ฆ | ์ฑ๊ธ ์ค๋ ๋ ์์ ์์ |
StringBuffer | ๊ฐ๋ณ ๊ฐ์ฒด, ๋๋ฆผ (๋๊ธฐํ) | ๋ฉํฐ ์ค๋ ๋ ์์ ์์ |
๋ณ๊ฒฝ์ด ์๋ค๋ฉด String, ๋น ๋ฅธ ์์ ์ StringBuilder, ๋ฉํฐ ์ค๋ ๋๋ StringBuffer!
'Programming languages > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์กฐ๊ฑด๋ฌธ (0) | 2025.05.01 |
---|---|
๋คํ์ฑ(Polymorphism)์ด ๋ญ๊ฐ์? (0) | 2025.04.30 |
๋ฌธ์์ด String Class (0) | 2025.04.29 |
Java์ ๋ฐ๋ณต๋ฌธ๊ณผ ํ๋ฆ ์ ์ด ํค์๋! (0) | 2025.04.23 |
์๋ฐ์ ๋ฐฐ์ด(Array) (0) | 2025.04.22 |