- String์ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์๋ ๋๊ฐ์ง๊ฐ ์๋ค.
String str1 = "hello"; //์๋ฐ์ดํ ์ฌ์ฉ
String str2 = new String("hello"); //๊ฐ์ฒด์ฌ์ฉ
- String์ ํด๋์ค๋ค. int, boolean๊ณผ ๊ฐ์ ๊ธฐ๋ณธํ์ด ์๋ ์ฐธ์กฐํ์ด๋ค.
- ๋ฌธ์์ด์ ์์ฃผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์๋ฐ์ดํ๋ก ๋ฌธ์์ด์ ๊ฐ์ธ๋ฉด ์ ์ ๋ก new String()์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค.
1. String ํด๋์ค ๊ตฌ์กฐ
public final class String {
//์์ฑ(ํ๋)
private final char[] value; //๋ฌธ์ ๋ฐ์ดํฐ ์์ฒด๋ char[]์ ๋ณด๊ด๋๋ค.
//๊ธฐ๋ฅ(๋ฉ์๋)
public String concat(String str) {...}
public int length() {...}
}
- ํด๋์ค์ด๋ฏ๋ก ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ฐ์ง
- ์๋ฐ 9 ์ดํ๋ถํฐ๋ char์ด ์๋ byte ๋ฐฐ์ด์ ์ฌ์ฉ
why? char์ 2byte๋ฅผ ์ฐจ์งํ์ง๋ง, ์์ด, ์ซ์๋ 1byte๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด
1) String ์ฃผ์ ๋ฉ์๋
- length() : ๋ฌธ์์ด ๊ธธ์ด ๋ฐํ
- charAt(int index) : ํน์ ์ธ๋ฑ์ค์ ๋ฌธ์๋ฅผ ๋ฐํ
- subString(int beginIndex, int endIndex) : ๋ฌธ์์ด์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ
- indexOf(String str) : ํน์ ๋ฌธ์์ด์ด ์์๋๋ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ
- toLowerCase(), toUpperCase() : ๋ฌธ์์ด์ ์๋ฌธ์ ๋๋ ๋๋ฌธ์๋ก ๋ฐํ
- trim() : ๋ฌธ์์ด ์ ๋์ ๊ณต๋ฐฑ์ ์ ๊ฑฐ
- concat(String str) : ๋ฌธ์์ด์ ๋ํจ
- ์ด์ธ์๋ ๊ณต์ ๋ฌธ์ ์ฐธ๊ณ
2) String ํด๋์ค์ ์ฐธ์กฐํ
- String์ ์ฐธ์กฐํ์ด์ง๋ง ๋๋ฌด ์์ฃผ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ + ์ฐ์ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
2. String ํด๋์ค - ๋น๊ต
- String ํด๋์ค๋ฅผ ๋น๊ตํ ๋์๋ equals()๋น๊ต๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ์๋ฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ equals(), toString()์ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ด์๋ค.
1) ๋ฌธ์์ด ๋ฆฌํฐ๋ด, ๋ฌธ์์ด ํ
String class StringPrc{
public static main(String[] args){
String str1 = "hello";
String str2 = "hello";
System.out.println(str1 == str2); //true
System.out.println(str1.equals(str2)); //true
}
}
- String str1 = "hello"์ ๊ฐ์ด ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ๋ฌธ์์ด ํ์ ์ฌ์ฉํ๋ค.
- ์๋ฐ๊ฐ ์คํ๋๋ ์์ ์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ด ์์ผ๋ฉด ๋ฌธ์์ด ํ์ String ์ธ์คํด์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ , ๊ฐ์ ๋ฌธ์์ด์ด ์์ผ๋ฉด ๋ง๋ค์ง ์๋๋ค.
- String str1 = "hello"์ ๊ฐ์ด ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด ํ์์ "hello"๋ฅผ ์ฐพ๊ณ ์ธ์คํด์ค ์ฐธ์กฐ(x003)์ ๋ฐํํ๋ค.
- String str2 = "hello"๋ "hello๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๊ทธ ์ธ์คํด์ค ์ฐธ์กฐ์ธ x003์ ๋ฐํํ๋ค.
- ๋๋ฌธ์ str1 == str2๊ฐ true๊ฐ ๋๋ค.
- ๊ทธ๋ฌ๋ ๋์ด์ค๋ ๋ฌธ์์ด์ด ๋ฆฌํฐ๋ด์ผ์ง, ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ์ธ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ํ์์ ์ผ๋ก equals()๋ก ๋น๊ต๋ฅผ ํด์ผํ๋ค.
3. String ํด๋์ค - ๋ถ๋ณ ๊ฐ์ฒด
- String์ ๋ถ๋ณ ๊ฐ์ฒด์.
- ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ ๋ฐํ๊ฐ์ ๋ง๋ค์ด ๋ฐํํด์ผ ํ๋ค.
- String์ด ๋ถ๋ณ์ด ์๋๋ฉด String pool์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋ ์ ๋ ์๊ณ , ์ด๋ ์ด์ ์ ๋ฌธ์ ๊ฐ ๋์๋ ์ฌ์ด๋ ์ดํํธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
4. StringBuilder - ๊ฐ๋ณ String
1) ๋ถ๋ณ์ธ String ํด๋์ค์ ๋จ์
- ๋ฌธ์๋ฅผ ๋ํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ๋ง๋ค ๊ณ์ํด์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผํ๋ค
String str = "A" + "B" + "C"; //๋ชฉํ : ABC
String str = String("A") + String("B") + String("C");
String str = String("AB") + String("C"); // ์ฌ์ฉํ์ง ์๋ AB ์์ฑ
String str = String("ABC"); //์ํ๋ ๊ฐ
2) StringBuilder
- ์๋ฐ๋ StringBuilder๋ผ๋ ๊ฐ๋ณ String์ ์ ๊ณตํด ์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฒ ํด์ค (์ฌ์ฉ์ ์ฌ์ด๋ ์ดํํธ ์ฃผ์ํด์ผํจ)
- StringBuilder ๋ด๋ถ์๋ final์ด ์๋ค.
public class StringBuilderMAin {
public static void main(String[] args) {
StringBuilder sb = new String Builder();
sb.append("A");
sb.append("B");
sb.append("C");
System.out.println(sb); //ABC
sb.insert(3, "Java");
System.out.println(sb); //ABCJava
sb.delete(3, 7);
System.out.println(sb); //ABC
sb.reverse();
System.out.println(sb); //ABC
//StringBuilder -> String
String string = sb.toString();
System.out.println(string); //๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก String์ผ๋ก ๋ฐํ๊ฐ๋ฅ, ๋ถ๋ณ
}
}
- String์ ๋ถ๋ณํ๊ธฐ ๋๋ฌธ์ ๋ณํ๋ฅผ ์ฃผ๊ธฐ ์ํด์๋ ์๋ก์ด String ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด์ผ ํ๊ณ ๊ธฐ์กด ๊ฐ์ฒด๋ ๋ฒ๋ ค์ง๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฒ๋ฆฌ ์๊ฐ์ด ๋ ๋ง์ด ์๋ชจ๋๋ค.
- StringBuilder๋ ๊ฐ๋ณ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์์์ ์ถ๊ฐ, ์ญ์ ๋ฑ์ ์์ ์ ํ ์ ์์ผ๋ฉฐ, ์ด๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๋ฅด๋ฅด ์์ฑํ์ง ์์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
- ๋จ StringBuilder๋ฅผ ์ฌ์ฉํ ๋๋ ์ฌ์ด๋ ์ดํฉํธ๋ฅผ ์ฃผ์ํด์ผํ๋ค.
5. String ์ต์ ํ
1) ๋ฌธ์์ด ๋ฆฌํฐ๋ด ์ต์ ํ
- ์๋ฐ ์ปดํ์ผ๋ฌ๋ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ๋ํ๋ ๋ถ๋ถ์ ์๋์ผ๋ก ํฉ์ณ์ค๋ค.
String s1 = "Hello"+" World"; //Hello World!
2) String ๋ณ์ ์ต์ ํ
- String ๋ณ์์ ๊ฒฝ์ฐ ์์ ๊ฐ์ ํ์ธํ ์ ์์ด ๋จ์ํ๊ฒ ํฉ์น ์ ์๋ค.
String result = str1 + str2;
//์ปดํ์ผ (Example)
String result = new StringBuilder().append(str1).append(str2).toString();
3) String ์ต์ ํ๊ฐ ์ด๋ ค์ด ๊ฒฝ์ฐ
1- ๋ฃจํ์์์ ๋ฌธ์์ด์ ๋ํ๋ ๊ฒฝ์ฐ
String class LoopString {
public Static main(String[] args){
long startTime = System.currenTimeMillis();
String result = "";
for(int i = 0; i<10000; i++){
result += "Hello Java";
}
long endTime = System.currenTimeMillis();
System.out.println(result); //Hello Java X 100000
System.out.println(endTime - startTime) //์ค๋๊ฑธ๋ฆผ
//์ต์ ํ (Example)
String result = "";
for(int i = 0; i < 100000; i++) {
result = new StringBuilder().append(result).append("Hello JAVA").toString();
} // ๋ฐ๋ณต ํ์๋งํผ ๊ฐ์ฒด๊ฐ ์์ฑ๋จ
- ๋ฐ๋ณต๋ฌธ์ ๋ฃจํ ๋ด๋ถ์์๋ ๋ฐ๋ณต ํ์๋งํผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- ๋ฐ๋ณต๋ฌธ ๋ด์์ ๋ฌธ์์ด ์ฐ๊ฒฐ์ ๋ฐํ์์ ์ฐ๊ฒฐํ ๋ฌธ์์ด์ ๊ฐ์์ ๋ด์ฉ์ ๋ฐ๋ผ ๋ด์ฉ์ด ๊ฒฐ์ ๋๋๋ฐ,
์ด๋ฐ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ ์ผ๋ง๋ ๋ง์ ๋ฐ๋ณต์ด ์ผ์ด๋ ์ง ๋ฌธ์์ด์ด ์ด๋ป๊ฒ ๋ณํ ์ง ์์ธกํ ์ ์๊ธฐ ๋๋ฌธ์ ์ต์ ํ๊ฐ ์ด๋ ต๋ค.
//StringBuilder๋ฅผ ์ฌ์ฉํด ํด๊ฒฐ๊ฐ๋ฅ
String class LoopStringBuilder {
public Static main(String[] args){
long startTime = System.currenTimeMillis();
StringBuilder sb = new StringBuilder();
for(int i = 0; i<10000; i++){
sb.append("Hello Java");
}
String result = sb.toString();
long endTime = System.currenTimeMillis();
System.out.println(result); //Hello Java X 100000
System.out.println(endTime - startTime) //๊ฑฐ์ ์ฆ์ ์ด๋ฃจ์ด์ง
- ๋ฌธ์์ด์ ํฉ์น ๋ ๋๋ถ๋ถ ๊ฒฝ์ฐ ์ต์ ํ๊ฐ ๋๋ฏ๋ก +๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ง๋ง, ์๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ StringBuilder๊ฐ ๋ ์ข๋ค.
- ๋ฐ๋ณต๋ฌธ ์์์ ๋ฐ๋ณตํด์ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํ ๋
- ์กฐ๊ฑด๋ฌธ์ ํตํด ๋ฌธ์์ด์ ๋์ ์ผ๋ก ์กฐํฉํ ๋
- ๋ณต์กํ ๋ฌธ์์ด์ ํน์ ๋ถ๋ถ์ ๋ณ๊ฒฝํ ๋
- ๋งค์ฐ ๊ธด ๋์ฉ๋ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋
5. Method Chaining
public class ValueAdder{
private int value;
public ValueAdder add(int addValue) {
value += addValue; //add()๋ฅผ ํธ์ถํ๋ฉด value์ ๊ฐ์ ๋์ ํ๋ค.
return this; //์๊ธฐ ์์ ์ ์ฐธ์กฐ๊ฐ์ ๋ฐํํ๋ค.
}
public int getValue() {
return value;
}
}
public class MethodChainingMain {
public static void main(String args[]){
ValueAdder adder = new ValueAdder();
adder.append(1);
adder.append(2);
adder.append(3);
//add()๋ฉ์๋๋ฅผ ์ฌ๋ฌ๋ฒ ํธ์ถํด์ ๊ฐ์ ๋์ ํ๊ณ ๋ํจ
// add()๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ฌ์ฉ X
int result = add.getValue();
System.out.println(result); // 6
}
}
- add() ๋งค์๋ ๋ฐํ๊ฐ ์ฌ์ฉ
public class MethodChainingMain {
public static void main(String args[]){
ValueAdder adder = new ValueAdder(); //x001
ValueAdder adder1 = adder.add(1); //x001
ValueAdder adder2 = adder.add(2); //x001
ValueAdder adder3 = adder.add(3); //x001
int result = adder3.getValue();
System.out.println(result); // 6
}
}
- add() ๋ฉ์๋๋ ์๊ธฐ ์์ ์ ์ฐธ์กฐ๊ฐ์ ๋ฐํํ๊ณ ์ด๋ฅผ adder1, adder2, adder3์ ๋ณด๊ด
- ๋ฐ๋ผ์ adder1,2,3๋ ๋ชจ๋ ๊ฐ์ ์ฐธ์กฐ๊ฐ์ ์ฌ์ฉํ๋ค.
- ๋ ๋ณต์กํด๋ณด์ด๋ add()๋ฉ์๋ ๋ฐํ๊ฐ์ ์ฌ์ฉํ๋ ์ด์ (๋ฉ์๋ ์ฒด์ด๋)
.. ์๋ต
public static void main(String[] args) {
ValueAdder adder = new ValueAdder();
int result = adder.adder(1).adder(2).adder(3).getValue();
//int result = x001.adder(1).adder(2).adder(3).getValue();
//int result = x001.adder(2).adder(3).getValue();
//...
//int result = x001.getValue();
System.out.println(result); //6
}
- .์ ์ฐ๊ณ ๋ฉ์๋๋ฅผ ๊ณ์ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ ์ ์๋ค.
- ๋ง์น ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๋๋ฐ ์ด๋ฐ ๊ธฐ๋ฒ์ ๋ฉ์๋ ์ฒด์ด๋์ด๋ผ ํ๋ค.
- ๋ฉ์๋ ์ฒด์ด๋์ ์๊ธฐ ์์ ์ ์ฐธ์กฐ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
1)String Builder์ Method Chain
- StringBuilder๋ Method Chaining ๊ธฐ๋ฒ์ ์ ๊ณตํ๋ค.
- StringBuilder์์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ ๋๋ถ๋ถ์ ๋ฉ์๋๋ ๋ฉ์๋ ์ฒด์ด๋ ๊ธฐ๋ฒ์ ์ ๊ณตํ๊ธฐ ์ํด ์๊ธฐ ์์ ์ ๋ฐํํ๋ค.
- ์์ ์์ฑํ ์ฝ๋ ์ค์ด๊ธฐ
public class StringBuilderMAin {
public static void main(String[] args) {
StringBuilder sb = new String Builder();
String result = sb.append("A").append("B").append("C").toString();
System.out.println(result); //ABC
}
}
- ์ฐธ๊ณ : ๊น์ํ์ ์ค์ ์๋ฐ - ์ค๊ธ 1ํธ
๋๊ธ