์๋ฐ์์ ๋ํ์ ์ผ๋ก ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ์๋ฃํ ํด๋์ค๋ก String, StringBuffer, StringBuilder๋ฅผ ์ง์ํ๋ค.
3๊ฐ์ง ํด๋์ค๋ ๋ชจ๋ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋์ง๋ง, ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ์ฐ์์๊ฐ ๋ฌ๋ผ์ง๋ค.
String
์๋ฐ์์ String ๊ฐ์ฒด์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
์ฆ, ๋ถ๋ณ์ ์์ฑ์ ๊ฐ๋๋ค.(immutable)
์ฐธ๊ณ ) String ๋ด๋ถ ์ฝ๋
public final class String implements java.io.Serializable, Comparable {
private final byte[] value;
}
์์ ๋ฅผ ํตํด ์ดํด๋ณด์.
public static void main(String[] args) {
String str = "Hello";
str += "World";
System.out.println(str);
}
์ฒ์ "Hello"์ "World"๋ฅผ ๋ํด์ str์ ๊ฐ์ด ์์ ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ค์ ์๋ก์ด ์์ญ์ ํตํด ๊ฐ์ ์ฐธ์กฐํ ๊ฒ์ด๋ค.
๐ String str = "Hello";
๐ str += "World";
str๋ณ์๊ฐ ์ฒ์ ํ ๋น๋ฐ์๋ ์์ญ์ ๊ฐ์ "HelloWorld"๋ก ์์ ํ ๊ฒ์ด ์๋๋ผ "HelloWorld"๋ผ๋ ๊ฐ์ ๊ฐ์ง ์๋ก์ด ์์ญ์ ์ฐธ์กฐํ๊ณ ์์์ ๋ณผ ์ ์๋ค.
public static void main(String[] args) {
String str = "Hello";
str.toUpperCase();
System.out.println(str); // Hello
}
ํด๋น ์์ ๋ํ ์์ฒด ๋ฌธ์์ด์ด ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ์ฌ์ค์ ๋ณด์ฌ์ค๋ค.
StringBuffer, StringBuilder
๊ฐ์ฒด์ ๊ณต๊ฐ์ด ๋ถ์กฑํด์ง๋ ๊ฒฝ์ฐ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ์ ์ฐํ๊ฒ ๋๋ ค์ฃผ์ด ๊ฐ๋ณ(mutable)์ ์ด๋ค.
๋ด๋ถ Buffer์(๋ฐ์ดํฐ๋ฅผ ์์๋ก ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ)์ ๋ฌธ์์ด์ ์ ์ฅํด ๋๊ณ ๊ทธ ์์์ ์ถ๊ฐ, ์์ , ์ญ์ ์์ ์ ํ ์ ์๋๋ก ์ค๊ณ๋์ด ์๋ค.
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello");
sb.append("World");
System.out.println(sb);
}
๐StringBuffer sb = new StringBuffer("Hello")
๐ sb.append("World")
๋์ผ ๊ฐ์ฒด ๋ด์์ ๋ฌธ์์ด ์์ ์ด ๊ฐ๋ฅํ๋ค.
โ ์ ๋ฆฌ
String: ๋ฌธ์์ด์ด ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ๊ณ์ํด์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ถ๊ฐ๋๊ฒ ๋๋ค.
StringBuffer, StringBuilder: ์๋กญ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ธฐ์กด ๋ฌธ์์ด์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ์ฌ ์์ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
๋ฌธ์์ด์ ์ฐ์ฐ(์ถ๊ฐ, ์์ , ์ญ์ )์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒฝ์ฐ String ํด๋์ค๊ฐ ์๋ StringBuffer, StringBuilder๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. String์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋งค ์ ๋ฐ์ดํธ๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ด ์ถ๊ฐ๋๊ฒ ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
StringBuffer, StringBuilder ์ฐจ์ด
StringBuffer์ StringBuilder๋ ๊ฑฐ์ ๋น์ทํ์ง๋ง ๋ค๋ฅธ ์ ์ด ์๋ค.
๋ฐ๋ก ๋ฉํฐ ์ค๋ ๋(Thread)์์ ์์ (safe)ํ ์ง, ๊ทธ๋ ์ง ์์์ง์ ์ฐจ์ด๋ฟ์ด๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํด๋ณด์๋ฉด
๐ StringBuffer ํด๋์ค๋ ์ค๋ ๋์์ ์์ ํ๋ค. (thread safe)
๐ StringBuilder ํด๋์ค๋ ์ค๋ ๋์์ ์์ ํ์ง ์๋ค. (thread unsafe)
๋ ํด๋์ค๋ ๋ฌธ๋ฒ์ด๋ ๋ฐฐ์ด๊ตฌ์ฑ๋ ๋ชจ๋ ๊ฐ์ง๋ง, ๋๊ธฐํ(Synchronization)์์์ ์ง์์ ์ ๋ฌด๊ฐ ๋ค๋ฅด๋ค.
StringBuilder๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์์ง๋ง, StringBuffer๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ฌ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์๋ ์์ ํ๊ฒ ๋์ํ ์ ์๋ค. ๊ทธ ์ด์ ๋ StringBuffer๋ ๋ฉ์๋์์ synchronized ํค์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
๐กJava์ synchronized
์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๊ฐ ํ ๊ฐ์ ์์์ ์ ๊ทผํ๋ ค๊ณ ํ ๋, ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ค๋ ๋๋ฅผ ์ ์ธํ๊ณ ๋๋จธ์ง ์ค๋ ๋๋ค์ด ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋๋ก ๋ง๋ ์ญํ ์ ์ํํ๋ค.
Reference
์๋ฐ String / StringBuffer / StringBuilder ์ฐจ์ด์ & ์ฑ๋ฅ ๋น๊ต
'๐กCS > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] equals()์ hashCode()(+ ๋์ผ์ฑ, ๋๋ฑ์ฑ) (0) | 2023.06.09 |
---|---|
[Java] Call by value vs Call by reference (0) | 2023.06.08 |
์์ ํ์ (Primitive), ์ฐธ์กฐ ํ์ (Reference) (0) | 2023.06.07 |
์ ๊ทผ ์ ์ด์(private, default, protected, public) (0) | 2023.06.07 |
ํด๋์ค, ๊ฐ์ฒด, ์ธ์คํด์ค๋? (0) | 2023.06.07 |
๋๊ธ