String , StringBuffer , StringBuilder ํด๋์ค๋ ์๋ฐ์์ ๋ฌธ์์ด์ ๋ค๋ฃจ๋ '์๋ฃํ ํด๋์ค'๋ก ์ง์ํ๋ '3๊ฐ์ง ์๋ฃํ'์ด๋ค.
์ ์ธ๊ฐ์ง ์๋ฃํ์ ๋ชจ๋ ๋ฌธ์์ด์ ๋ค๋ฃฐ๋ ์ฌ์ฉํ๋, ๊ฐ๊ฐ ์ฐ์์๊ฐ ๋ค๋ฅด๋ค.
:๋ณดํต ์ฑ๋ฅ๊ณผ ์ํฉ์ ๋ฐ๋ผ ๋น๊ตํ์ฌ ์ ํํด์ ์ฌ์ฉํ๋ค.
String ํด๋์ค / StringBufferํด๋์ค, StringBuilder์ ๋ํด ๋น๊ต · ์ ๋ฆฌํด๋ณด์!
String ํด๋์ค
- ๋ถ๋ณํ(immutable) ์๋ฃํ
- ๋ฐ๋ผ์ ์ด๊ธฐ ๊ณต๊ฐ๊ณผ ์ฐ์ฐ์ ํ ๋ ๋ง์ ์๊ฐ๊ณผ ์์์ ์ฌ์ฉํ๋ ํธ์ด๋ค.
- ๋ถ๋ณํ์ผ๋ก ์ค๊ณํ๋ ์ด์ : ๋ณด์, ๋๊ธฐํ, ์บ์ฑ(ํ ๊ณต๊ฐ ์ ์ฝ)๋ฑ์ ์ฑ๋ฅ์ ์ด์ ์ ์ป๊ธฐ ์ํด์์ด๋ค.
- ๋ฌธ์์ด์ ์์ ํ ๊ฒฝ์ฐ, ์์ ๋ ๋ฌธ์์ด์ด ์๋กญ๊ฒ ํ ๋น๋์ด ์ ์ฃผ์๋ฅผ ๋๊ธฐ๊ฒ ๋๋ค.
String str1 = "abc"; // "abc"
str1.toUpperCase(); // "ABC"
System.out.println(str1); // "abc"
ใด. str1.toUpperCase()๋ฅผ ํด๋, str1 ๋ฌธ์์ด ์์ฒด๋ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒ์ ํ์ธ ํ ์์๋ค. = ๋ถ๋ณํ
String str = "hello";
str = str + " world!";
System.out.println(str); // hello world! ๊ฐ ์ถ๋ ฅ๋จ.
ใด. ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ง์น str ๊ฐ์ด ์๋กญ๊ฒ ๋ณ๊ฒฝ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์๋๋ค.
์ค์ ๋ก๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ก "hello world!" ๊ฐ์ ์ ์ฅํ ์์ญ์ ๋ง๋ค๊ณ , ๋ณ์ str์ ๋ค์ ์ฐธ์กฐํ๋ ๊ฒ์ผ๋ก ์๋ํ๋ค.
StringBuffer ํด๋์ค & StringBuilder ํด๋์ค
StringBuffer ํด๋์ค์ StringBuilder ํด๋์ค๋ ์ฌ์ฉ ๋ฌธ๋ฒ์ด ์๋ก ๋์ผํ๋ค. ๋์ ์ฐจ์ด๋ ๋ด๋ถ์ ์ธ ๋์์ ์๋ค.
๋จผ์ StringBuffer ํด๋์ค์ ๋ํด ์ ๋ฆฌํด๋ณด์.
i) StringBuffer ํด๋์ค
- ๊ฐ๋ณํ ์๋ฃํ
- ๋ฌธ์์ด์ ์ถ๊ฐ or ๋ณ๊ฒฝํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
- 'concat() ๋ฉ์๋'์ '+ ์ฐ์ฐ'์ผ๋ก ๋ฌธ์์ด์ ์ด์ด๋ถ์ผ๋ , StringBuffer ํด๋์ค๋ ๋ด๋ถ์ ๋ฒํผ(buffer)๋ผ๋ ๋ ๋ฆฝ์ ์ธ ๊ณต๊ฐ์ ๊ฐ์ ธ, ๊ทธ๊ณณ์ ๋ฌธ์์ด์ ๋ฐ๋ก ์ถ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฐ๋ผ์ Stringํด๋์ค๋ณด๋ค ๊ณต๊ฐ์ ๋ญ๋น๊ฐ ์ ๊ณ , ์ฐ์ฐ์๋๊ฐ ๋น ๋ฅด๋ค.
- ๋ด๋ถ์ ๋ฒํผ ํฌ๊ธฐ์ ๊ธฐ๋ณธ๊ฐ์ 16๊ฐ ๋ฌธ์๊ฐ ์ ์ฅ๋๋ ํฌ๊ธฐ์ด๋ค. ์์ฑ์๋ฅผ ํตํด ๋ณ๋ ์ง์ ํ ์ ๋ ์๋ค.
StringBuffer str1 = new StringBuffer(); // ๊ธฐ๋ณธ 16 ๋ฒํผ ํฌ๊ธฐ๋ก ์์ฑ
// str1.capacity() - StringBuffer ๋ณ์์ ๋ฐฐ์ด ์ฉ๋์ ํฌ๊ธฐ ๋ฐํ
System.out.println(str1.capacity()); // 16
str1.append("1111111111111111111111111111111111111111"); // 40๊ธธ์ด์ ๋ฌธ์์ด์ append
System.out.println(str1.capacity()); // 40 (์ถ๊ฐ๋ ๋ฌธ์์ด ๊ธธ์ด๋งํผ ๋์ด๋จ)
i-1) StringBuffer ๋ด์ฅ ๋ฉ์๋
- StringBufferํด๋์ค ๋ฉ์๋์ StringBuilder ํด๋์ค ๋ฉ์๋ ์ฌ์ฉ๋ฒ์ ๋์ผํ๋ค.
StringBuffer( )
๋ฒํผ์ ๊ธธ์ด๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ํฌ๊ธฐ๊ฐ 16 ์ธ ๋ฒํผ๋ฅผ ์์ฑ
StringBuffer(int length)
length ๊ธธ์ด๋ฅผ ๊ฐ์ง StringBuffer ํด๋์ค์ ์ธ์คํด์ค(buffer)๋ฅผ ์์ฑ
StringBuffer(String str)
์ง์ ํ ๋ฌธ์์ด( str )์ ๊ธธ์ด๋ณด๋ค 16 ๋งํผ ๋ ํฐ ๋ฒํผ๋ฅผ ์์ฑ
StringBuffer append(boolean b)
StringBuffer append(char c)
StringBuffer append(char[ ] str)
StringBuffer append(double d)
StringBuffer append(float f)
StringBuffer append(int i)
StringBuffer append(long l)
StringBuffer append(Object obj)
StringBuffer append(String str)
๋งค๊ฐ๋ณ์๋ก ์
๋ ฅ๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ StringBuffer ์ธ์คํด์ค๊ฐ ์ ์ฅํ๊ณ ์๋ ๋ฌธ์์ด์ ๋ค์ ๋ง๋ถ์
int capacity( )
StringBuffer ์ธ์คํด์ค์ ๋ฒํผํฌ๊ธฐ ๋ฐํ (์๋ฃํ์ ํ ๋น๋ ํฌ๊ธฐ๋ฅผ ๋ฐํ)
int length( )
StringBuffer ์ธ์คํด์ค์ ์ ์ฅ๋ ๋ฌธ์์ด์ ๊ธธ์ด ๋ฐํ (๋ฒํผ์ ๋ด๊ธด ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐํ)
char charAt(int index)
์ง์ ๋ ์์น( index )์ ์๋ ๋ฌธ์๋ฅผ ๋ฐํ
StringBuffer delete(int start, int end)
์์์์น( start )๋ถํฐ ๋ ์์น( end )์ฌ์ด์ ์๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐ
๋จ, end ์์น์ ๋ฌธ์๋ ์ ์ธ(start <= x < end)
StringBuffer deleteCharAt(int index)
์ง์ ๋ ์์น( index )์ ๋ฌธ์๋ฅผ ์ ๊ฑฐ
StringBuffer insert(int pos, boolean b)
StringBuffer insert(int pos, char c)
StringBuffer insert(int pos, char[ ] str)
StringBuffer insert(int pos, doule d)
StringBuffer insert(int pos, float f)
StringBuffer insert(int pos, int i)
StringBuffer insert(int pos, long l)
StringBuffer insert(int pos, Object obj)
StringBuffer insert(int pos, String str)
๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ง์ ๋ ์์น( pos )์ ์ถ๊ฐ
( pos ๋ 0๋ถํฐ ์์)
StringBuffer replace(int start, int end, String str)
์ง์ ๋ ๋ฒ์( start ~ end )์ ๋ฌธ์๋ค์ ์ฃผ์ด์ง ๋ฌธ์์ด๋ก ๋ฐ๊พผ๋ค.
๋จ, end ์ ์์น๋ ๋ฒ์์ ํฌํจ๋์ง X (start <= x < end)
StringBuffer reverse( )
StringBuffer ์ธ์คํด์ค์ ์ ์ฅ๋์ด ์๋ ๋ฌธ์์ด์ ์์๋ฅผ ๊ฑฐ๊พธ๋ก ๋์ด
void setCharAt(int index, char ch)
์ง์ ๋ ์์น( index )์ ๋ฌธ์๋ฅผ ์ฃผ์ด์ง ๋ฌธ์( ch )๋ก ๋ฐ๊พผ๋ค.
void setLength(int newLength)
์ง์ ๋ ๊ธธ์ด๋ก ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ณ๊ฒฝ
๊ธธ์ด๋ฅผ ๋๋ฆฌ๋ ๊ฒฝ์ฐ์๋ ๋๋จธ์ง ๋น๊ณต๊ฐ๋ค์ ๋๋ฌธ์( \u0000 )๋ก ์ฑ์ด๋ค.
String toString( )
StringBuffer ์ธ์คํด์ค์ ๋ฌธ์์ด์ String ์ผ๋ก ๋ณํ
String substring(int start)
String substring(int start, int end)
์ง์ ๋ ๋ฒ์ ๋ด์ ๋ฌธ์์ด์ String ์ผ๋ก ๋ฝ์์ ๋ฐํ
(์์์์น( start )๋ง ์ง์ ํ๋ฉด ์์์์น๋ถํฐ ๋๊น์ง ๋ฝ์์ ๋ฐํ)
*์ถ์ฒ: @Inpa Dev ํฐ์คํ ๋ฆฌ
๐
String ํด๋์ค๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋กญ๊ฒ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐ๋ฉด, StringBuffer ํด๋์ค์ StringBuilder ํด๋์ค๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๊ธฐ์กด ๋ฌธ์์ด์ ์์ ๋์ด ์ ์ฉ๋จ์ผ๋ก, ๋ฌธ์๋ฅผ ์์ , ์ญ์ , ํฉ์น๋ ๊ฒฝ์ฐ์๋ StringBuilder ํด๋์ค/ StringBuffer ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ฐ๋์งํ๋ค.
ii. StringBuffer / StringBuilder ํด๋์ค ๋น๊ต
1. ๋ ํด๋์ค์ ์ฐจ์ด์
StringBuffer ํด๋์ค | StringBuilder ํด๋์ค |
๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์์ ํจ. | ๋ฌธ์์ด ํ์ฑ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ฐ์ํจ. |
์ค๋ ๋ safe ๊ธฐ๋ฅ ์ ๊ณต ใ
(์ฑ๋ฅ ์ ํ ์์ธ) |
์ค๋ ๋ safe ๊ธฐ๋ฅ ์ ๊ณต x |
2. ๋๋ฑ๋น๊ต
StringBuffer ํด๋์ค/ StrtingBuilder ํด๋์ค-> String ํด๋์ค ๊ฐ์ฒด์ ๋ฌ๋ฆฌ equals() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ก๋ฉ X
StringBuffer sb = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("hello");
System.out.println(sb == sb2); // false
System.out.println(sb2.equals(sb)); // false
๊ทธ๋ฌ๋ฏ๋ก toString() ์ผ๋ก ๊ฐ์ฒด๋ฅผ String๊ฐ์ฒด๋ก ๋ณํ ํ ๋ค์ equals() ๋ก ๋น๊ต ํด์ค์ผํ๋ค..
String sb_tmp = sb.toString();
String sb2_tmp = sb2.toString();
System.out.println(sb_tmp.equals(sb2_tmp)); // true
3. ๋ฌธ์์ด ํฉ์น๊ธฐ
๐
- '+' ์ฐ์ฐ์๋ก ํฉ์น๊ธฐ
- String.concat() ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
- StringBuffer() ๊ฐ์ฒด ์ฌ์ฉํ๊ธฐ
- StringBuilder() ๊ฐ์ฒด ์ฌ์ฉํ๊ธฐ
String str ="hello ";
//1. + ์ฐ์ฐ์ ์ด์ฉ
String a = str +"world!";
//2. string.concat() ๋ฉ์๋
String b = str.concat("world!");
//3. StringBuffer() ๊ฐ์ฒด ์์ฑ
String c = new StringBuffer("hello ").appned("world!").toString();
//4. StringBuilder() ๊ฐ์ฒด ์์ฑ
String d = new StringBuilder("hello ").append("world!").toString();
+์ฐธ๊ณ ๋ก ์ด์ค์์ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ ๊ฒ์ StringBuilder ๊ฐ์ฒด์ StringBuffer ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.!
.
.
.
๊ทธ๋ฌ๋ฏ๋ก
๋ฌธ์์ด ์ฐ์ฐ์ด ๋ง์ ๊ฒฝ์ฐ, ์ฒ์๋ถํฐ "StringBuilder() ๊ฐ์ฒด์์ฑ -> ๋ฌธ์์ด๋ก ์ ํ .to.String() ๋ฉ์๋ ์ฌ์ฉ!)" ํด์ ๋ค๋ฃจ์..
StringBuilder a = new StringBuilder();
for(int i = 0; i < 10000; i++) {
a.append(i);
}
final String b = a.toString();
StringTokenizer ํด๋์ค
- Stringํด๋์ค์์ ์ ๊ณตํ๋ split() ๋ฉ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ํด๋์ค
- ์ ๋ฌ ๋ฐ์ ๋ฌธ์์ด์ ๊ตฌ๋ถ์๋ก ๋๋์ด ๊ฐ ํ ํฐ์ ์ ์ฅํ๋ค.
public static void main(String[] args) {
String str ="์ด๋ก๋ณถ,22,์์ธํน๋ณ์ ์์ฒ๊ตฌ ๋ชฉ๋ ,์ฌ";
StringTokenizer st = new StringTokenizer(str,",");
System.out.println(st.countTokens());
while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
- countTokens() : ํ ํฐ์ ๊ฐ์ ๋ํ๋ด์ฃผ๋ ๋ฉ์๋
- StringTokenizer ํด๋์ค์ String์ split() ๋ฉ์๋์ ์ฐจ์ด์ : split์ Stringํด๋์ค์ ๋ฉ์๋, ์ถ์ถํ ๋ฌธ์๋ฅผ ๋ฐฐ์ด(!=ํ ํฐ)๋ก ์ ์ฅํจ.
- coundtToken(), nextToken(), hasMoreTokens()...
๐๋ฌธ์์ด ์๋ฃํ ์ด์ ๋ฆฌ
String | StringBuffer | StringBuilder | |
๊ฐ๋ณ ์ฌ๋ถ | ๋ถ๋ณ | ๊ฐ๋ณ | ๊ฐ๋ณ |
์ค๋ ๋ ์ธ์ดํ(thread safe) | O | O | X |
์ฐ์ฐ์๋ | ๋๋ฆผ | ๋น ๋ฆ | ์์ฃผ๋น ๋ฆ |
์ฌ์ฉ์์ | ·๋ฌธ์์ด ์ถ๊ฐ ์ฐ์ฐ์ด ์ ์ผ๋ฉฐ ·์ค๋ ๋ ์ธ์ดํ ํ๊ฒฝ์์ |
·๋ฌธ์์ด ์ถ๊ฐ ์ฐ์ฐ์ด ๋ง๊ณ ·์ค๋ ๋ ์ธ์ดํ ํ๊ฒฝ์์ |
·๋ฌธ์์ด ์ถ๊ฐ ์ฐ์ฐ์ด ๋ง๊ณ ·๋น ๋ฅธ ์ฐ์ฐ์ด ํ์ํ ๋ ·๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์ผ๋ |
ํ๋ฆฐ ๋ถ๋ถ์ด๋ ์ด์ํ ๋ถ๋ถ์ด ์์ผ๋ฉด ๋๊ธ๋ก ์ง์ ํด์ฃผ์ธ์!
๊ฐ์ฌํฉ๋๋ค :)
*์ ๋ณด ๋ฐ ์๋ฃ ์ถ์ฒ: @Inpa Dev ํฐ์คํ ๋ฆฌ, pdf ์๋ฃ ์ฐธ๊ณ