
<๋ชฉ์ฐจ>
1. ๊ธฐ๋ณธ
2. ๋น๊ต
3. ๋ถ๋ณ ๊ฐ์ฒด
4. ์ฃผ์ ๋ฉ์๋ 1
5. ์ฃผ์ ๋ฉ์๋ 2
6. ๊ฐ๋ณ String
7. ์ต์ ํ
8. ๋ฉ์๋ ์ฒด์ด๋ - Method Chaining
1. String ํด๋์ค - ๊ธฐ๋ณธ
์๋ฐ์์ ๋ฌธ์๋ฅผ ๋ค๋ฃจ๋ ๋ํ์ ํ์ ์ char, String์ด๋ค.
char์ ๋ฌธ์ ํ๋๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉ
char๋ฅผ ์ฌ์ฉํด์ ์ฌ๋ฌ ๋ฌธ์๋ฅผ ๋์ดํ๋ ค๋ฉด char[]์ ์ฌ์ฉํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ char์ ๋ฐฐ์ด๋ก ๋ง๋๋๊ฒ ๋ณด๋ค String์ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํ๋ค.
String์ ํด๋์ค์ด๋ค.
ํด๋์ค์ ํน์ง์ ์ฐธ์กฐํ์ด๋ค. ๊ทธ๋์ String์ผ๋ก ๋ง๋ ๋ณ์๋ String ์ธ์คํด์ค์ ์ฐธ์กฐ๊ฐ๋ง ๋ค์ด๊ฐ ์ ์๋ค.
ํ์ง๋ง String์ ๋๊ฐ์ง ํํ๋ก ๋ง๋ค์ ์๋ ํน๋ณํจ์ด ์๋ค.
public class StringBasicMain {
public static void main(String[] args) {
String str1 = "hello";
String str2 = new String("hello");
}
}
๋ฌธ์์ด์ ์์ฃผ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ํธ์์ ์๋ฐ์ดํ๋ก ๋ฌธ์์ด์ ๊ฐ์ธ๋ฉด ์๋์ผ๋ก new String() ํ์์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค.
String์ ํด๋์ค์ธ๋ฐ ํด๋์ค ๋ด๋ถ์๋ ์ด๋ป๊ฒ ์๊ฒผ์๊น?
public final class String {
//๋ฌธ์์ด ๋ณด๊ด
private final char[] value;// ์๋ฐ 9 ์ด์
private final byte[] value;// ์๋ฐ 9 ์ดํ
//์ฌ๋ฌ ๋ฉ์๋
public String concat(String str) {...}
public int length() {...}
...
}
ํด๋์ค์ด๋ฏ๋ก ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค.
์์ฑ(ํ๋)
private final char[] value;
String์ ์ค์ ๋ฌธ์์ด ๊ฐ์ด ๋ณด๊ด๋๋ค. ๋ฌธ์ ๋ฐ์ดํฐ ์์ฒด๋ char[]์ ๋ณด๊ด๋๋ค.
์ฆ, ์ฐ๋ฆฌ๋ String ๋ณ์์ด๋ฆ = "๋ด์ฉ";์ผ๋ก ๊ฐ๋จํ๊ฒ ๋ด์ฉ์ ๋ฃ์ง๋ง, ํด๋์ค ๋ด๋ถ์์ '๋ด์ฉ'์ ๊ฒฐ๊ตญ chr[]ํํ๋ก ์ ์ฅ๋๋ค๋ ๋ป์ด๋ค.
์๋ฐ 9 ์ดํ๋ก๋ char[]์ด ์๋๋ผ byte[]๋ก ์ ์ฅ๋๋ ๊ฒ์ผ๋ก ๋ฐ๋๊ธฐ๋ ํ์๋ค.
๊ธฐ๋ฅ(๋ฉ์๋)
String ํด๋์ค๋ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋ค์ํ ๊ธฐ๋ฅ(๋ฉ์๋)๋ ์จ๊ฒจ์ ธ ์๋ค.
- length() : ๋ฌธ์์ด์ ๊ธธ์ด ๋ฐํ
- charAt(int index) : ํน์ ์ธ๋ฑ์ค์ ๋ฌธ์๋ฅผ ๋ฐํ
- substring(int beginIndex, int endIndex) : ๋ฌธ์์ด์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ.
- indexOf(String str) : ํน์ ๋ฌธ์์ด์ด ์์๋๋ ์ธ๋ฑ์ค๋ฅผ ๋ฐํ.
- toLowerCase(), toUpperCase() : ๋ฌธ์์ด์ ์๋ฌธ์ ๋๋ ๋๋ฌธ์๋ก ๋ณํ.
- trim() : ๋ฌธ์์ด ์ ๋์ ๊ณต๋ฐฑ์ ์ ๊ฑฐ.
- concat(String str) : ๋ฌธ์์ด์ ๋ํ๋ค.
Stringํด๋์ค์ ์ฐธ์กฐํ
์ฐธ์กฐํ์ ๋ณ์์ ๊ณ์ฐํ ์ ์๋ ๊ฐ์ด ๋ค์ด์๋ ๊ฒ์ด ์๋๋ผ x001๊ณผ ๊ฐ์ด ๊ณ์ฐํ ์ ์๋ ์ฐธ์กฐ๊ฐ์ด ๋ค์ด์๋ค.
๋ฐ๋ผ์ ์์น์ ์ผ๋ก๋ +์ ๊ฐ์ ์ฐ์ฐ์ ์ฌ์ฉํ ์ ์๋ค.
package lang.string;
public class StringConcatMain {
public static void main(String[] args) {
String a = "hello";
String b = " java";
String result1 = a.concat(b);
String result2 = a + b;
}
}
์์น์ ์ผ๋ก๋ ๋ฌธ์์ด์ ๋ํ ๋ String์ด ์ ๊ณตํ๋ concat()๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง
ํธ์์ +์ฐ์ฐ๋ ์ ๊ณตํ๋ค.
2. Stringํด๋์ค - ๋น๊ต
String ํด๋์ค ๋น๊ตํ ๋๋ == ๋น๊ต๊ฐ ์๋๋ผ ํญ์ equals() ๋น๊ต๋ฅผ ํด์ผ ํ๋ค.
๋์ผ์ฑ(identity) : == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๋ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๊ฐ ๋์ผํ ๊ฐ์ฒด์ธ์ง๋ฅผ ํ์ธ
๋๋ฑ์ฑ(Equality) : equals() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ฒด๊ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ์์ง ํ์ธ
๋ฌธ์์ด ๋ฆฌํฐ๋ด์ Java์์ ๋ฌธ์์ด์ "(์๋ฐ์ดํ)๋ก ๊ฐ์ธ์ ์ง์ ์ ์ํ ํํ๋ฅผ ๋งํ๋๋ฐ
`String str3 = "hello"` ์ ๊ฐ์ด ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ฐ๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ๊ณผ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ ํด ๋ฌธ์์ด ํ์ ์ฌ์ฉํ๋ค.
์๋ฐ๊ฐ ์คํ๋๋ ์์ ์ ํด๋์ค์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ด ์์ผ๋ฉด ๋ฌธ์์ด ํ์ `String` ์ธ์คํด์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๋ค. ์ด๋ ๊ฐ์ ๋ฌธ์์ด์ด ์์ผ๋ฉด ๋ง๋ค์ง ์๋๋ค.
`String str3 = "hello"` ์ ๊ฐ์ด ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด ํ์์ `"hello"` ๋ผ๋ ๋ฌธ์๋ฅผ ๊ฐ์ง `String` ์ธ์คํด์ค๋ฅผ ์ฐพ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐพ์ ์ธ์คํด์ค์ ์ฐธ์กฐ( `x003` )๋ฅผ ๋ฐํํ๋ค.
`String str4 = "hello"` ์ ๊ฒฝ์ฐ `"hello"` ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ฏ๋ก ๋ฌธ์์ด ํ์์ `str3` ๊ณผ ๊ฐ์ `x003` ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
๋ฌธ์์ด ํ ๋๋ถ์ ๊ฐ์ ๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ด๊ณ ๋ฌธ์๋ฅผ ๋ง๋๋ ์๊ฐ๋ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ๋ ์ต์ ํ ํ ์ ์๋ค.
๋ฐ๋ผ์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ์ ์ฐธ์กฐ๊ฐ์ ๊ฐ์ง๋ฏ๋ก `==` ๋น๊ต์ ์ฑ๊ณตํ๋ค.
ํ์ง๋ง ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ๋์ด์ค๋ String ์ธ์คํด์ค๊ฐ new String()๋ก ๋ง๋ค์ด์ง๊ฑด์ง ๋ฌธ์์ด ๋ฆฌํฐ๋ด๋ก ๋ง๋ค์ด์ง๊ฑด์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ด์ ๋ฌธ์์ด ํ๋ก ์ ์ฅ๋๋์ง๋ ์์๊ฐ ์๋ค.
๋ฐ๋ผ์ ์ฐธ์กฐ๊ฐ ์ผ์น๋ฅผ ํ์ธํ๋ ๋์ผ์ฑ(==)์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ๋ง๊ณ
๋ฌธ์์ด ๋น๊ต๋ ํญ์ equals()๋ฅผ ์ฌ์ฉํด์ ๋๋ฑ์ฑ ๋น๊ต๋ฅผ ํด์ผ ํ๋ค.
3. String ํด๋์ค - ๋ถ๋ณ ๊ฐ์ฒด
String์ ๋ถ๋ณ ๊ฐ์ฒด์ด๋ค. ๋ฐ๋ผ์ ์์ฑ ์ดํ์ ์ ๋๋ก ๋ด๋ถ์ ๋ฌธ์์ด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๊ทธ๋์ ๊ธฐ์กด ๋ฌธ์์ด์ ์๋ก์ด ๋ด์ฉ์ ๋ง๋ถ์ผ ์ ์๋ ํน์ฑ์ ๊ฐ์ก๋ค.
package lang.string.immutable;
public class StringImmutable1 {
public static void main(String[] args) {
String str = "hello";
str.concat(" java");
System.out.println("str = " + str);
} }
์คํ๊ฒฐ๊ณผ
str = hello
์ด๋ ๊ฒ ๊ธฐ์กด๊ฐ์ str.concat("java");๋ฅผ ์ ์ธํ๋ค๊ณ ๋ฌธ์๊ฐ ํฉ์ณ์ง์ง ์๋๋ค.
์ด๊ฒ์ ๋ถ๋ณ ๊ฐ์ฒด์ ํน์ฑ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
package lang.string.immutable;
public class StringImmutable2 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = str1.concat(" java");
System.out.println("str1 = " + str1);
System.out.println("str2 = " + str2);
} }
str1 = hello
str2 = hello java
๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ ๊ธฐ์กด ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๊ณ , ๋์ ์ ์๋ก์ด ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ๋ค.
๊ทธ๋ผ ์ String์ด ๋ถ๋ณ์ผ๋ก ์ค๊ณ๋์์๊น?
๋ฌธ์์ด ํ์ ์๋ `String` ์ธ์คํด์ค์ ๊ฐ์ด ์ค๊ฐ์ ๋ณ๊ฒฝ๋๋ฉด ๊ฐ์ ๋ฌธ์์ด์ ์ฐธ๊ณ ํ๋ ๋ค๋ฅธ ๋ณ์์ ๊ฐ๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ค.
String์ ์๋ฐ ๋ด๋ถ์ ๋ฌธ์์ด ํ์ ํตํด ์ต์ ํ๋ฅผ ํ๋๋ก ๋ง๋ค์ด์ก๋ค.
๋ง์ฝ String ๋ด๋ถ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค๋ฉด, ๊ธฐ์กด์ ๋ฌธ์์ด ํ์์ ๊ฐ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๋ค๋ ํจ๊ป ๋ฐ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฌ์ด๋ ์ดํํธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
๋ณ๊ฒฝ๋ ๋ด์ฉ์ ์๋ก์ด ์ฐธ์กฐ๊ฐ์ ์ ์ฅํ๋๋ก ์ค๊ณ๋์๋ค.
4. String ํด๋์ค - ์ฃผ์ ๋ฉ์๋ 1
์ฃผ์ ๋ฉ์๋ ๋ชฉ๋ก
4.1 ๋ฌธ์์ด ์ ๋ณด ์กฐํ
- length() : ๋ฌธ์์ด ๊ธธ์ด ๋ฐํ
- isEmpty() : ๋ฌธ์์ด์ด ๋น์ด์๋์ง ํ์ธ
- isBlank() : ๋ฌธ์์ด์ด ๋น์ด์๋์ง ํ์ธ
- charAt(int index) : ์ง์ ๋ ์ธ๋ฑ์ค์ ์๋ ๋ฌธ์๋ฅผ ๋ฐํ
4.2 ๋ฌธ์์ด ๋น๊ต
- equals(Object anObject) : ๋ ๋ฌธ์์ด์ด ๋์ผํ์ง ๋น๊ต.
- equalsIgnoreCase(String anotherString) : ๋ ๋ฌธ์์ด์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ๋น๊ต.
- compareTo(String anotherString) : ๋ ๋ฌธ์์ด์ ์ฌ์ ์์ผ๋ก ๋น๊ต.
- compareToIgnoreCase(String str) : ๋ ๋ฌธ์์ด์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ์ฌ์ ์ ์ผ๋ก ๋น๊ต.
- startsWith(String prefix) : ๋ฌธ์์ด์ด ํน์ ์ ๋์ฌ๋ก ์์ํ๋์ง ํ์ธ
- endsWith(String suffix) : ๋ฌธ์์ด์ด ํน์ ์ ๋ฏธ์ฌ๋ก ๋๋๋์ง ํ์ธ.
4.3 ๋ฌธ์์ด ๊ฒ์
- contains(CharSequence s) : ๋ฌธ์์ด์ด ํน์ ๋ฌธ์์ด์ ํฌํจํ๊ณ ์๋์ง ํ์ธ.
- indexOf(String ch)` / `indexOf(String ch, int fromIndex) : ๋ฌธ์์ด์ด ์ฒ์ ๋ฑ์ฅํ๋ ์์น๋ฅผ ๋ฐํ.
- lastIndexOf(String ch) : ๋ฌธ์์ด์ด ๋ง์ง๋ง์ผ๋ก ๋ฑ์ฅํ๋ ์์น๋ฅผ ๋ฐํ
4.4 ๋ฌธ์์ด ์กฐ์ ๋ฐ ๋ฐํ
- substring(int beginIndex) / substring(int beginIndex, int endIndex) : ๋ฌธ์์ด์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฐํ
- concat(String str) : ๋ฌธ์์ด์ ๋์ ๋ค๋ฅธ ๋ฌธ์์ด์ ๋ถ์ธ๋ค.
- replace(CharSequence target, CharSequence replacement) : ํน์ ๋ฌธ์์ด์ ์ ๋ฌธ์์ด๋ก ๋์ฒด.
- replaceAll(String regex, String replacement) : ๋ฌธ์์ด์์ ์ ๊ท ํํ์๊ณผ ์ผ์นํ๋ ๋ถ๋ถ์ ์ ๋ฌธ์์ด๋ก ๋์ฒด.
- replaceFirst(String regex, String replacement) : ๋ฌธ์์ด์์ ์ ๊ท ํํ์๊ณผ ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ์ ๋ฌธ์์ด๋ก ๋์ฒด.
- toLowerCase() / toUpperCase() : ๋ฌธ์์ด์ ์๋ฌธ์๋ ๋๋ฌธ์๋ก ๋ฐํ.
- trim() : ๋ฌธ์์ด ์์ชฝ ๋์ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ค. ๋จ์ Whitespace๋ง ์ ๊ฑฐํ ์ ์๋ค.
- strip() : Whitespace์ ์ ๋์ฝ๋ ๊ณต๋ฐฑ์ ํฌํจํด์ ์ ๊ฑฐํ๋ค.
4.5 ๋ฌธ์์ด ๋ถํ ๋ฐ ์กฐํฉ
- split(String regex) : ๋ฌธ์์ด์ ์ ๊ท ํํ์์ ๊ธฐ์ค์ผ๋ก ๋ถํ ํ๋ค.
- join(CharSequence delimiter, CharSequence... elements)` : ์ฃผ์ด์ง ๊ตฌ๋ถ์๋ก ์ฌ๋ฌ ๋ฌธ์์ด์
๊ฒฐํฉํ๋ค.
4.6 ๊ธฐํ ์ ํธ๋ฆฌํฐ
- valueOf(Object obj): ๋ค์ํ ํ์ ์ ๋ฌธ์์ด๋ก ๋ณํ.
- toCharArray() : ๋ฌธ์์ด์ ๋ฌธ์ ๋ฐฐ์ด๋ก ๋ฐํ.
- format(String format, Object... args)` : ํ์ ๋ฌธ์์ด๊ณผ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํ
๋ค.
- matches(String regex)` : ๋ฌธ์์ด์ด ์ฃผ์ด์ง ์ ๊ท ํํ์๊ณผ ์ผ์นํ๋์ง ํ์ธํ๋ค.
6. StringBuilder - ๊ฐ๋ณ String
๋ถ๋ณ์ธ Stringํด๋์ค์ ๋จ์ .
๋ถ๋ณ์ธ `String` ์ ๋ด๋ถ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค. ๋ฐ๋ผ์ ๋ณ๊ฒฝ๋ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด `String` ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
๋ฌธ์๋ฅผ ์์ฃผ ๋ํ๊ฑฐ๋ ๋ณ๊ฒฝํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ๋ ๋ง์ `String` ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , GCํด์ผ ํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ปดํจํฐ์ CPU, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์์ ๋ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌธ์์ด์ ํฌ๊ธฐ๊ฐ ํด์๋ก, ๋ฌธ์์ด์ ๋ ์์ฃผ ๋ณ๊ฒฝํ ์๋ก ์์คํ ์ ์์์ ๋ ๋ง์ด ์๋ชจํ๋ค.
StringBuilder
์๋ฐ๋ `StringBuilder` ๋ผ๋ ๊ฐ๋ณ `String` ์ ์ ๊ณตํ๋ค. ๋ฌผ๋ก ๊ฐ๋ณ์ ๊ฒฝ์ฐ ์ฌ์ด๋ ์ดํ ํธ์ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
StringBuilder ํด๋์ค ๋ด๋ถ๋ฅผ ์ดํด๋ณผ๊น?
public final class StringBuilder {
char[] value;// ์๋ฐ 9 ์ด์
byte[] value;// ์๋ฐ 9 ์ดํ
//์ฌ๋ฌ ๋ฉ์๋
public StringBuilder append(String str) {...}
public int length() {...}
...
}
`StringBuilder` ๋ ๋ด๋ถ์ `final` ์ด ์๋ ๋ณ๊ฒฝํ ์ ์๋ `byte[]` ์ ๊ฐ์ง๊ณ ์๋ค.
StringBuilder ์ฌ์ฉ ์
package lang.string.builder;
public class StringBuilderMain1_1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("A");
sb.append("B");
sb.append("C");
sb.append("D");
System.out.println("sb = " + sb);
sb.insert(4, "Java");
System.out.println("insert = " + sb);
sb.delete(4, 8);
System.out.println("delete = " + sb);
sb.reverse();
System.out.println("reverse = " + sb);
//StringBuilder -> String
String string = sb.toString();
System.out.println("string = " + string);
}
}
`StringBuilder` ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
`append()` ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ฌ๋ฌ ๋ฌธ์์ด์ ์ถ๊ฐํ๋ค.
`insert()` ๋ฉ์๋๋ก ํน์ ์์น์ ๋ฌธ์์ด์ ์ฝ์ ํ๋ค.
`delete` () ๋ฉ์๋๋ก ํน์ ๋ฒ์์ ๋ฌธ์์ด์ ์ญ์ ํ๋ค.
`reverse()` ๋ฉ์๋๋ก ๋ฌธ์์ด์ ๋ค์ง๋๋ค.
๋ง์ง๋ง์ผ๋ก `toString` ๋ฉ์๋๋ฅผ ์ฌ์ฉํด `StringBuilder` ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก `String` ์ ์์ฑํด์ ๋ฐํํ๋ค.
์คํ ๊ฒฐ๊ณผ
sb = ABCD
insert = ABCDJava
delete = ABCD
reverse = DCBA
string = DCBA
```
< StringBuilder๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ ๊ฒฝ์ฐ >
- ๋ฐ๋ณต๋ฌธ์์ ๋ฐ๋ณตํด์ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํ ๋
- ์กฐ๊ฑด๋ฌธ์ ํตํด ๋์ ์ผ๋ก ๋ฌธ์์ด์ ์กฐํฉํ ๋
- ๋ณต์กํ ๋ฌธ์์ด์ ํน์ ๋ถ๋ถ์ ๋ณ๊ฒฝํด์ผ ํ ๋
- ๋งค์ฐ ๊ธด ๋์ฉ๋ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋
7. ๋ฉ์๋ ์ฒด์ธ๋ - Method Chaining
package lang.string.chaining;
public class ValueAdder {
private int value;
public ValueAdder add(int addValue) {
value += addValue;
return this;
}
public int getValue() {
return value;
} }
๋จ์ํ ๊ฐ์ ๋์ ํด์ ๋ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํด๋์ค๋ค.
`add()` ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๋ง๋ค ๋ด๋ถ์ `value` ์ ๊ฐ์ ๋์ ํ๋ค.
`add()` ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ์๊ธฐ ์์ ( `this` )์ ์ฐธ์กฐ๊ฐ์ ๋ฐํํ๋ค. ์ด ๋ถ๋ถ์ ์ ์ํด์ ๋ณด์.
package lang.string.chaining;
public class MethodChainingMain1 {
public static void main(String[] args) {
ValueAdder adder = new ValueAdder();
adder.add(1);
adder.add(2);
adder.add(3);
int result = adder.getValue();
System.out.println("result = " + result);
} }
์คํ ๊ฒฐ๊ณผ
result = 6
add()` ๋ฉ์๋๋ฅผ ์ฌ๋ฌ๋ฒ ํธ์ถํด์ ๊ฐ์ ๋์ ํด์ ๋ํ๊ณ ์ถ๋ ฅํ๋ค.
์ฌ๊ธฐ์๋ `add()` ๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ฌ์ฉํ์ง ์์๋ค.
์ด๋ฒ์๋ `add()` ๋ฉ์๋์ ๋ฐํ๊ฐ์ ์ฌ์ฉํด๋ณด์.
package lang.string.chaining;
public class MethodChainingMain2 {
public static void main(String[] args) {
ValueAdder adder = new ValueAdder();
ValueAdder adder1 = adder.add(1);
ValueAdder adder2 = adder1.add(2);
ValueAdder adder3 = adder2.add(3);
int result = adder3.getValue();
System.out.println("result = " + result);
} }
์คํ ๊ฒฐ๊ณผ
result = 6
dder` , `adder1` , `adder2` , `adder3` ์ ๋ชจ๋ ๊ฐ์ ์ฐธ์กฐ๊ฐ์ ์ฌ์ฉํ๋ค.
์๋ํ๋ฉด `add()` ๋ฉ์๋๊ฐ ์ ๊ธฐ ์์ ( `this` )์ ์ฐธ์กฐ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฒ์๋ ๋ฐฉ๊ธ ์ฌ์ฉํ๋ ๋ฐฉ์์์ ๋ฐํ๋ ์ฐธ์กฐ๊ฐ์ ์๋ก์ด ๋ณ์์ ๋ด์์ ๋ณด๊ดํ์ง ์๊ณ ,
๋์ ์ ๋ฐ๋ก ๋ฉ์๋ ํธ์ถ์ ์ฌ์ฉํด๋ณด์.
package lang.string.chaining;
public class MethodChainingMain3 {
public static void main(String[] args) {
ValueAdder adder = new ValueAdder();
int result = adder.add(1).add(2).add(3).getValue();
System.out.println("result = " + result);
}
}
์คํ ๊ฒฐ๊ณผ
result = 6
์คํ ์์
`add()` ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด `ValueAdder` ์ธ์คํด์ค ์์ ์ ์ฐธ์กฐ๊ฐ( `x001` )์ด ๋ฐํ๋๋ค.
์ด ๋ฐํ๋ ์ฐธ์กฐ๊ฐ์ ๋ณ์์ ๋ด์๋์ง ์์๋ ๋๋ค. ๋์ ์ ๋ฐํ๋ ์ฐธ์กฐ๊ฐ์ ์ฆ์ ์ฌ์ฉํด์ ๋ฐ๋ก ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
adder.add(1).add(2).add(3).getValue() //value=0
x001.add(1).add(2).add(3).getValue() //value=0, x001.add(1)์ ํธ์ถํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ก x001
์ ๋ฐํํ๋ค.
x001.add(2).add(3).getValue() //value=1, x001.add(2)์ ํธ์ถํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ก x001์ ๋ฐํํ
๋ค.
x001.add(3).getValue() //value=3, x001.add(3)์ ํธ์ถํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ก x001์ ๋ฐํํ๋ค.
x001.getValue() //value=6
6
```
๋ฉ์๋ ํธ์ถ์ ๊ฒฐ๊ณผ๋ก ์๊ธฐ ์์ ์ ์ฐธ์กฐ๊ฐ์ ๋ฐํํ๋ฉด, ๋ฐํ๋ ์ฐธ์กฐ๊ฐ์ ์ฌ์ฉํด์ ๋ฉ์๋ ํธ์ถ์ ๊ณ์ ์ด์ด๊ฐ ์ ์๋ค.
์ฝ๋๋ฅผ๋ณด๋ฉด `.` ์ ์ฐ๊ณ ๋ฉ์๋๋ฅผ ๊ณ์ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ๋ค.
๋ง์น ๋ฉ์๋๊ฐ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ธ๋ค.
์ด๋ฌํ๊ธฐ๋ฒ ์ ๋ฉ์๋ ์ฒด์ด๋์ด๋ผ ํ๋ค.
๋ฌผ๋ก ์คํ ๊ฒฐ๊ณผ๋ ๊ธฐ์กด๊ณผ ๋์ผํ๋ค.
StringBuilder์ ๋ฉ์๋ ์ฒด์ธ(Chain)
`StringBuilder` ์ `append()` ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ์๊ธฐ ์์ ์ ์ฐธ์กฐ๊ฐ์ ๋ฐํํ๋ค.
public StringBuilder append(String str) {
super.append(str);
return this;
}
StringBuilder` ์์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ ๋๋ถ๋ถ์ ๋ฉ์๋๋ ๋ฉ์๋ ์ฒด์ด๋ ๊ธฐ๋ฒ์ ์ ๊ณตํ๊ธฐ ์ํด ์๊ธฐ ์์ ์ ๋ฐํ ํ๋ค.
์) `insert()` , `delete()` , `reverse()`
์์ `StringBuilder` ๋ฅผ ์ฌ์ฉํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ํ ์ ์๋ค.
package lang.string.builder;
public class StringBuilderMain1_2 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
String string = sb.append("A").append("B").append("C").append("D")
.insert(4, "Java")
.delete(4, 8)
.reverse()
.toString();
System.out.println("string = " + string);
}
}
์คํ ๊ฒฐ๊ณผ
string = DCBA