Java String
ํน์ ํ ๋ฌธ์์ด์ ๊ณ์์ ์ผ๋ก ๋ํ์ฌ ๊ฒฐ๊ณผ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฌธ์ ๋ฅผ ํ๊ณ ์์๋ค. ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ์ฌ ๋ฌธ์ ๋ฅผ ์ฐพ์๋ณด๋ ์ฌ์ฉํ๋ ๋ฌธ์์ด Class์ ๋ํ ๋ฌธ์ ์๋ค. ๊ฐ ๋ฌธ์์ด Class์ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ํฌ์คํ ์ ํ๋ค.
String, StringBuilder, String Buffer์ ์ฐจ์ด.
String
: ๊ธฐ์กด์ ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ง์ ํ๊ณ ๊ธฐ์กด์ ๋ฌธ์์ด ๊ฐ์ฒด๋ ์ฐ๋ ๊ธฐ๊ฐ ๋๋ค.StringBuilder
: ๊ธฐ์กด์ ๋ฌธ์์ด ๊ฐ์ฒด์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์์ผ ๊ฐ์ ๋ํ๋ค. // ๋๊ธฐํ ๊ธฐ๋ฅ ์ ๊ณต XStringBuffer
: ๊ธฐ์กด์ ๋ฌธ์์ด ๊ฐ์ฒด์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์์ผ ๊ฐ์ ๋ํ๋ค. // ๋๊ธฐํ ๊ธฐ๋ฅ ์ ๊ณต O
Test Code
/**
* Created by nesoy on 2017. 11. 16..
* blog : https:nesoy.github.io
* email : kyoje11@gmail.com
*/
public class Main {
public static void main(String[] args) {
test_string(100);
test_stringBuilder(100);
test_stringBuffer(100);
test_string(1000);
test_stringBuilder(1000);
test_stringBuffer(1000);
test_string(10000);
test_stringBuilder(10000);
test_stringBuffer(10000);
test_string(100000);
test_stringBuilder(100000);
test_stringBuffer(100000);
}
public static void test_string(int size) {
long start = System.currentTimeMillis();
String test = "";
for (int i = 0; i < size; i++) {
test += i;
}
long end = System.currentTimeMillis();
System.out.println("String");
System.out.println("ํฌ๊ธฐ : " + size + " ์๊ฐ : " + (end - start));
}
public static void test_stringBuilder(int size) {
long start = System.currentTimeMillis();
StringBuilder testBuilder = new StringBuilder();
for (int i = 0; i < size; i++) {
testBuilder.append(i);
}
long end = System.currentTimeMillis();
System.out.println("StringBuilder");
System.out.println("ํฌ๊ธฐ : " + size + " ์๊ฐ : " + (end - start));
}
public static void test_stringBuffer(int size) {
long start = System.currentTimeMillis();
StringBuffer testBuilder = new StringBuffer();
for (int i = 0; i < size; i++) {
testBuilder.append(i);
}
long end = System.currentTimeMillis();
System.out.println("StringBuffer");
System.out.println("ํฌ๊ธฐ : " + size + " ์๊ฐ : " + (end - start));
System.out.println();
}
}
Result
String
์ด ๋ง์ ์ฐ์ฐ์ ํ๊ฒ๋๋ฉด ํ์ฐํ๊ฒ ๋๋ฆฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Thinking - Update 2018.09.14
๊ทธ๋ ๋ค๋ฉด ์ String์ด Immutableํ๊ฒ ์ค๊ณํ์๊น?
- immutableํ๊ฒ ์ค๊ณํจ์ผ๋ก์จ Side effect๋ฅผ ์ต๋ํ ์ ๊ฑฐํ๋ ค๋ ์๋์ธ๊ฑฐ ๊ฐ์ต๋๋ค.
- ์ค์ ๋ก Side effect๋ ์ค์์ง๋ง Memory๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ issue๊ฐ ๋ฐ์ํ๊ฒ ๋์์ต๋๋ค.
- ๊ทธ๋ ๊ธฐ์ mutableํ
StringBuilder
๊ฐ ๋์ค๊ฒ ๋์์ง๋ง Thread-Safeํ์ง ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋์์ต๋๋ค. - mutableํ๋ฉด์ Thread-Safeํ
StringBuffer
๊ฐ ๋ฑ์ฅํ๊ฒ ๋์์ต๋๋ค.