์๋ก
์ด์ ์ String ํด๋์ค์ ๋ํด ์ ๋ฆฌํด ๋ณธ ์ ์ด ์์ต๋๋ค. String ํด๋์ค์ ๊ฒฝ์ฐ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์ง์ ๋ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ง์ ์ฐ์ฐ์ '+'๋ฅผ ์ฌ์ฉํด์ ๋ฌธ์์ด์ ๊ฒฐํฉํ ๊ฒฝ์ฐ ๋งค ์ฐ์ฐ ์๋ง๋ค ์๋ก์ด ๋ฌธ์์ด์ ๊ฐ์ง String ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค๊ณ ํ์ต๋๋ค.
ํ์ง๋ง StringBuffer ํด๋์ค๋ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฒ ๊ฒ์๊ธ์์๋ ์ด๋ฌํ StringBuffer๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์์๋ณด๊ณ StringBuilder๋ ๋ ๋ฌด์์ธ์ง ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
1. StringBuffer
StringBuffer๋ ๋ด๋ถ์ ์ผ๋ก ๋ฌธ์์ด ํธ์ง์ ์ํ ๋ฒํผ(buffer)๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, StringBuffer ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๊ทธ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
public final class StringBuffer implements java.io.Serializable{
private char[] value;
}
์ ์ฝ๋์์ ์ ์ ์๋ฏ์ด, StringBuffer ํด๋์ค๋ String ํด๋์ค์ ๊ฐ์ด ๋ฌธ์์ด์ ์ ์ฅํ๊ธฐ ์ํ charํ ๋ฐฐ์ด์ ์ฐธ์กฐ ๋ณ์๋ฅผ ์ธ์คํด์ค ๋ณ์๋ก ์ ์ธํด ๋๊ณ ์์ต๋๋ค. StringBuffer ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋, charํ ๋ฐฐ์ด์ด ์์ฑ๋๋ฉฐ ์ด๋ ์์ฑ๋ charํ ๋ฐฐ์ด์ ์ธ์คํด์ค ๋ณ์ value๊ฐ ์ฐธ์กฐํ๊ฒ ๋ฉ๋๋ค.
1) StringBuffer์ ์์ฑ์
StringBuffer ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋, ์ ์ ํ ๊ธธ์ด์ charํ ๋ฐฐ์ด์ด ์์ฑ๋๊ณ , ์ด ๋ฐฐ์ด์ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ํธ์งํ๊ธฐ ์ํ ๊ณต๊ฐ(buffer)์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
StringBuffer ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋๋ ์์ฑ์ StringBuffer(int length)๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ณ , ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด 16๊ฐ์ ๋ฌธ์๋ฅผ ์ ์ฅํ ์ ์๋ ํฌ๊ธฐ์ ๋ฒํผ๋ฅผ ์์ฑํฉ๋๋ค.
public StringBuffer(int length) {
value = new char[length];
shared = false;
}
public StringBuffer() {
this(16); // ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ๋ฒํผ์ ํฌ๊ธฐ๋ 16์ด ๋๋ค.
}
public StringBuffer(String str) {
this(str.length() + 16); // ์ง์ ํ ๋ฌธ์์ด์ ๊ธธ์ด๋ณด๋ค 16์ด ๋ ํฌ๊ฒ ๋ฒํผ๋ฅผ ์์ฑํ๋ค.
append(str)
}
๋ง์ฝ ๋ฒํผ์ ํฌ๊ธฐ๊ฐ ์์ ํ๋ ค๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ณด๋ค ์์ ๋๋ ๋ด๋ถ์ ์ผ๋ก ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํค๋ ์์ ์ด ์ํ๋ฉ๋๋ค.
๋ฐฐ์ด์ ๊ธธ์ด๋ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ์๋ก์ด ๊ธธ์ด์ ๋ฐฐ์ด์ ์์ฑํ ํ์ ์ด์ ๋ฐฐ์ด์ ๊ฐ์ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ํ๋ฉ๋๋ค. ํด๋น ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์๊ธ์ ArrayList๋ถ๋ถ์์ ์ ๋ฆฌํ ๋ฐ๊ฐ ์์ต๋๋ค.
2) StringBuffer์ ๋ณ๊ฒฝ
String๊ณผ ๋ฌ๋ฆฌ StringBuffer๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ ์ด๋ฏธ์ง๋ StringBuffer์์์ ๋ด์ฉ ๋ณ๊ฒฝ์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค.
๋ํ StringBuffer์์ append() ๋ฉ์๋๋ ๋ฐํ ํ์ ์ด StringBuffer์ธ๋ฐ ์์ ์ ์ฃผ์๋ฅผ ๋ฐํํฉ๋๋ค.
public static void main(String args[]) {
StringBuffer sb = new StringBuffer("abc"); // abc๋ฅผ ๊ฐ์ง sb๋ฅผ ์์ฑํ๋ค. (ํฌ๊ธฐ๋ 2+16)
StringBuffer sb2 = sb.append("ZZ"); // sb์ ๋ด์ฉ ๋ค์ "ZZ"๋ฅผ ์ถ๊ฐํ๊ณ , ๊ทธ sb์ ์ฃผ์๋ฅผ sb2๊ฐ ๊ฐ๋ฅดํจ๋ค.
System.out.println(sb); // abcZZ
System.out.println(sb2); // abcZZ
}
๊ทธ๋์ ์ ์ฝ๋์์ sb.append("ZZ")๋ฅผ ์ํํ ํ sb์ ์ฃผ์๋ฅผ sb2๊ฐ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์ sb์ sb2๋ ์๋ก ๊ฐ์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋์ด ์ถ๋ ฅ ์ ๋ ๋ค "abcZZ" ๊ฐ์ ์ถ๋ ฅํ๊ฒ ๋ฉ๋๋ค.
3) StringBuffer์ ๋น๊ต
String ํด๋์ค์์๋ equals ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ๋ฌธ์์ด์ ๋ด์ฉ์ ๋น๊ตํ๋๋ก ๊ตฌํ๋์ด ์์ง๋ง, StringBuffer ํด๋์ค๋ equals ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์์์ StringBufferํด๋์ค์ equals ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ "==" ์ฐ์ฐ์ผ๋ก ๋น๊ตํ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค.
public static void main(String args[]) {
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
System.out.println(sb == sb2); // false
System.out.println(sb.equals(sb2)); // false
}
๋ฐ๋ฉด์ toString()์ ์ค๋ฒ๋ผ์ด๋ฉ๋์ด ์์ด์ StringBuffer ์ธ์คํด์ค์ toString()์ ํธ์ถํ๋ฉด, ๋ด๊ณ ์๋ ๋ฌธ์์ด์ String์ผ๋ก ๋ฐํํฉ๋๋ค. ๊ทธ๋์ StringBuffer ์ธ์คํด์ค์ ๋ด๊ธด ๋ฌธ์์ด์ ๋น๊ตํ๊ธฐ ์ํด์๋ ์๋ ์ฝ๋์ ๊ฐ์ด StringBuffer ์ธ์คํด์ค์ toString()์ ํธ์ถํด์ String ์ธ์คํด์ค๋ฅผ ์ป์ ๋ค์, ์ฌ๊ธฐ์ equals ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋น๊ตํด์ผ ํฉ๋๋ค.
public static void main(String args[]) {
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
String s = sb.toString();
String s2 = sb2.toString();
System.out.println(s == s2); // false
System.out.println(s.equals(s2)); // true
}
2. StrungBuilder
์ฌ์ค StringBuilder์ StringBuffer์ ์ฐจ์ด๋ ์ค๋ ๋์ ๋๊ธฐํ ๊ธฐ๋ฅ์ด ์๋ ์๋์ ์ฐจ์ด๋ง ์๊ณ ๋๋จธ์ง๋ ์์ ํ ๋๊ฐ์ ๊ธฐ๋ฅ์ผ๋ก ์์ฑ๋์ด ์์ต๋๋ค.
- StringBuffer๋ ๋ฉํฐ์ค๋ ๋์ ์์ (thread safe)ํ๋๋ก ๋๊ธฐํ๋์ด ์์ต๋๋ค.
- StringBuilder๋ StringBuffer์์ ์ค๋ ๋์ ๋๊ธฐํ๋ง ๋บ ์ฑ๋ก ๋์ผํ๊ฒ ๊ตฌํ๋์ด ์์ต๋๋ค.
์ฐธ๊ณ
'BackEnd๐ฑ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] String format() method (0) | 2022.05.14 |
---|---|
[Java] Object to int (0) | 2022.05.06 |
[Java] wrapper ํด๋์ค์ ์ ์, ๋ฉ๋ชจ๋ฆฌ, ์บ์ฑ (0) | 2022.04.08 |
[Java] ArrayList vs LinkedList (0) | 2022.04.06 |
[Java] String ํด๋์ค (0) | 2022.04.05 |
[Java] ์ธํฐํ์ด์ค(interface) ์ด ์ ๋ฆฌ (0) | 2022.03.30 |
๋๊ธ