์๋ก
์๋ฐ์์ '+' ์ฐ์ฐ์ ํตํ ๋ฌธ์์ด ํฉ์น๊ธฐ๋ฅผ ์ง์ํ๋ผ๋ ํฅ๋ฏธ๋ก์ด ์ฃผ์ ๋ฅผ ๋ณด๊ฒ ๋์ด ๊ธ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
๊ทธ์ ์ ๋จผ์ String๊ณผ StringBuffer, ๊ทธ๋ฆฌ๊ณ StringBuilder์ ๋ํ ์ฌ์ ์ง์์ด ์์ผ๋ฉด ์ดํดํ๊ธฐ ์์ํฉ๋๋ค. ํด๋น ๋ด์ฉ์ ์๋ ๊ฒ์๊ธ์์ ์ ๋ฆฌํ ์ ์ด ์์ต๋๋ค.
๊ฐ๋จํ๊ฒ ๋ค์ ์์ฝํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
1. String ํด๋์ค๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ immutable ํด๋์ค์ด๋ค.
- ํ๋ฒ ์์ฑ๋ String ์ธ์คํด์ค๊ฐ ๊ฐ๊ณ ์๋ ๋ฌธ์์ด์ ์ฝ์ด ์ฌ ์๋ง ์๊ณ , ๋ณ๊ฒฝํ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด ์๋์ ์ฝ๋์ ๊ฐ์ด '+'์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ๋ฌธ์์ด์ ๊ฒฐํฉํ๋ ๊ฒฝ์ฐ ์ธ์คํด์ค ๋ด์ ๋ฌธ์์ด์ด ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ๋ฌธ์์ด("ab")์ด ๋ด๊ธด String ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค.
2. String๊ณผ ๋ฌ๋ฆฌ StringBuffer๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์๋ค.
- StringBuffer ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋, ์ ์ ํ ๊ธธ์ด์ charํ ๋ฐฐ์ด์ด ์์ฑ๋๊ณ , ์ด ๋ฐฐ์ด์ ๋ฌธ์์ด์ ์ ์ฅํ๊ณ ํธ์งํ๊ธฐ ์ํ ๊ณต๊ฐ(buffer)์ผ๋ก ์ฌ์ฉ๋๋ค.
- ๋ง์ฝ ๋ฒํผ์ ํฌ๊ธฐ๊ฐ ์์ ํ๋ ค๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ณด๋ค ์์ ๋๋ ๋ด๋ถ์ ์ผ๋ก ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํค๋ ์์ ์ด ์ํ๋๋ฉฐ, ๋ฐฐ์ด์ ๊ธธ์ด๋ ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก ์๋ก์ด ๊ธธ์ด์ ๋ฐฐ์ด์ ์์ฑํ ํ์ ์ด์ ๋ฐฐ์ด์ ๊ฐ์ ๋ณต์ฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ํ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ ์๋ฐ์์ '+' ์ฐ์ฐ์ ํตํ ๋ฌธ์์ด ํฉ์น๊ธฐ๋ฅผ ์ง์ํด์ผ ํ๋์ง ํ๋ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
String '+' ์ฐ์ฐ์ด ์ผ์ด๋๋ ๊ณผ์
Java์์ Stirng '+' ์ฐ์ฐ์๋ Java ์ปดํ์ผ๋ฌ์์ ๊ตฌํ๋๋ฉฐ ์ปดํ์ผ ํ์์ ์ปดํ์ผ ์ ๋ด๋ถ์ ์ผ๋ก StringBuilder ํด๋์ค๋ฅผ ๋ง๋ ํ ๋ค์ ๋ฌธ์์ด๋ก ๋ฐํํฉ๋๋ค. ์ฆ ์๋์ ์ฝ๋์ฒ๋ผ ๋์ํฉ๋๋ค.
public class Test {
public static void main(String[] args) {
String banana = "๋ฐ๋๋";
banana += "์ฅฌ์ค";
// ์ ์๋ ๋์ผ
String bananaJuice = new StringBuilder("๋ฐ๋๋").append("์ฅฌ์ค").toString();
}
}
๋ฒ์จ๋ถํฐ ์ ์ฌ์ฉํ๋ฉด ์๋๋์ง ๊ฐ์ ์ก์ผ์ ๋ถ๋ ์์ผ์๊ฒ ์ง๋ง ์กฐ๊ธ ๋ ํ์คํ ๋น๊ต๋ฅผ ํด ๋ด
์๋ค.
๋ง์ฝ ์ ์ฝ๋์ฒ๋ผ ๋จ์ํ '+' ์ฐ์ฐ์ด ๋ฐ๋ณต๋ฌธ ์์ ๋ค์ด๊ฐ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
public class Test {
public static void main(String[] args) {
String number = "0";
for(int i=1; i<=10000; i++){
number += "i";
}
// ์ ์๋ ๋์ผ
String number2 = "0";
for(int i=1; i<=10000; i++){
number2 = new StringBuilder(number2).append(i).toString();
}
}
}
์ ์ฝ๋์ฒ๋ผ ๋ฐ๋ณต๋ฌธ ์์์ '+' ์ฐ์ฐ์ ์ํํ๋ค๋ฉด ๋ฐ๋ณต๋ฌธ์ ํ์๋งํผ StringBuilder ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ append()์ toString() ๋ฉ์๋์ ํธ์ถ์ด ๋งค๋ฒ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ฑ๋ฅ์ด ์ ํ๋ ์๋ฐ์ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ ๋ญ๋น๋ ์ปค์ง๊ฒ ๋ฉ๋๋ค.
public class Test {
public static void main(String[] args) {
final StringBuilder a = new StringBuilder();
for (int i = 0; i < 10000; i++) {
a.append(i);
}
final String b = a.toString();
}
}
๊ทธ๋ ๊ธฐ์ ์์ ๊ฐ์ด ๋ํ๊ธฐ ์ฐ์ฐ์ด ๋ง์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ ์ฒ์๋ถํฐ StringBuilder ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ํฉ์น๋ ๊ฒ ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
StringBuilder vs String ์ฑ๋ฅ ์ธก์
public class Test {
public static void main(String[] args) {
stringBuilderTest();
stringTest();
}
public static void stringTest(){
String result = "";
long start = System.currentTimeMillis();
for(int i = 0 ; i < 100000; i++){
result += "test";
}
long end = System.currentTimeMillis();
System.out.println("String exec time : " + (end - start));
}
public static void stringBuilderTest(){
StringBuilder result = new StringBuilder();
long start = System.currentTimeMillis();
for(int i = 0 ; i < 100000; i++){
result.append("test");
}
long end = System.currentTimeMillis();
System.out.println("String builder exec time : " + (end - start));
}
}
ํ๋ฒ ์ง์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ฒ์๋ถํฐ StringBuilder๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ String '+' ์ฐ์ฐ์ ์ํ ์๋๋ฅผ ๋น๊ตํด ๋ณด์์ต๋๋ค.
์์ ๊ฐ์ด String '+' ์ฐ์ฐ์ ์ฌ์ฉํ๋ฉด StringBuilder๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ด ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ํ์๋งํผ StringBuilder ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ณ '+' ์ฐ์ฐ ๋ด๋ถ์ ์ผ๋ก ๋ง์ ์ผ๋ค์ด ์ผ์ด๋์ ์์๋๋ก ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ฒฐ๋ก ์ ์ผ๋ก ๋ง์ ๋ฌธ์์ด ํฉ์น๊ธฐ ์ฐ์ฐ์ด ํ์ํ๋ค๋ฉด StringBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฑ๋ฅ๋ฉด์์ ์ข๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
'BackEnd๐ฑ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์์ ๋์์ฑ์ ํด๊ฒฐํ๋ ๋ค์ํ ๋ฐฉ๋ฒ๊ณผ Redis์ ๋ถ์ฐ๋ฝ (5) | 2023.01.08 |
---|---|
ํด์ ์๋ฃ๊ตฌ์กฐ์, ํด์ ์ถฉ๋ ๊ทธ๋ฆฌ๊ณ Java์ HashMap ๋์ ๋ฐฉ๋ฒ (1) | 2022.12.30 |
[Java] Checked Exception๊ณผ UnChecked Exception (2) | 2022.12.18 |
[OOP] ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น 5๊ฐ์ง (0) | 2022.06.02 |
[Java] ๋ด๋ถ ํด๋์ค(inner class) ์ ์ต๋ช ํด๋์ค(anonymous class) (2) | 2022.05.18 |
[Java] (Project, Package, Class, Method) Naming ๊ท์น (0) | 2022.05.16 |
๋๊ธ