<๋ชฉ์ฐจ>
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

+ Recent posts