charAt์€ ์ž๋ฐ”์—์„œ ๋ฌธ์ž์—ด(String)์˜ ํŠน์ • ์œ„์น˜์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

๋ฌธ์ž์—ด์€ ๋ฌธ์ž(char)์˜ ๋ฐฐ์—ด๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—,

์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐœ๋ณ„ ๋ฌธ์ž์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.


1. charAt ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

char charAt(int index)

 

๋งค๊ฐœ๋ณ€์ˆ˜:

index: ๋ฌธ์ž์—ด์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์€ ๋ฌธ์ž์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ •์ˆ˜์ด๋‹ค.

 

๋ฐ˜ํ™˜๊ฐ’:

์ง€์ •๋œ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋‹จ์ผ ๋ฌธ์ž(char).

 

์˜ˆ์™ธ ์ฒ˜๋ฆฌ:

StringIndexOutOfBoundsException: ์ฃผ์–ด์ง„ index๊ฐ€ 0๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜, ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.


 

2. ์‚ฌ์šฉ ์˜ˆ์‹œ

public class Main {
    public static void main(String[] args) {
        String str = "Hello, World!";
        
        // ํŠน์ • ์œ„์น˜์˜ ๋ฌธ์ž ๊ฐ€์ ธ์˜ค๊ธฐ
        char ch = str.charAt(0);  // ์ธ๋ฑ์Šค 0 -> 'H'
        System.out.println(ch);  // ์ถœ๋ ฅ: H

        char ch2 = str.charAt(7);  // ์ธ๋ฑ์Šค 7 -> 'W'
        System.out.println(ch2);  // ์ถœ๋ ฅ: W

        // ๋ฌธ์ž์—ด ๋์˜ ๋ฌธ์ž ๊ฐ€์ ธ์˜ค๊ธฐ
        char lastChar = str.charAt(str.length() - 1);  // ๋งˆ์ง€๋ง‰ ๋ฌธ์ž '!'
        System.out.println(lastChar);  // ์ถœ๋ ฅ: !
    }
}

 


3. charAt์˜ ํŠน์ง•

0-based index: ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

   - str.charAt(0)์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

   - str.charAt(str.length() - 1)์€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ž…๋ ฅํ•˜๋ฉด StringIndexOutOfBoundsException์ด ๋ฐœ์ƒํ•œ๋‹ค.

String str = "Hello";
char ch = str.charAt(10);  // ์˜ˆ์™ธ ๋ฐœ์ƒ: Index 10 out of bounds

 

 


4. ํ™œ์šฉ ์˜ˆ์‹œ

 

(1) ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๋ฌธ์ž ์ฐพ๊ธฐ

 

๋ฌธ์ž์—ด์˜ ํŠน์ • ์œ„์น˜์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

public class Main {
    public static void main(String[] args) {
        String str = "apple";
        
        // 'p' ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜ ์ฐพ๊ธฐ
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == 'p') {
                count++;
            }
        }
        System.out.println("Number of 'p': " + count);  // ์ถœ๋ ฅ: 2
    }
}

 

(2) ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ

 

charAt์„ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋‹ค.

public class Main {
    public static void main(String[] args) {
        String str = "hello";
        StringBuilder reversed = new StringBuilder();

        for (int i = str.length() - 1; i >= 0; i--) {
            reversed.append(str.charAt(i));
        }

        System.out.println(reversed);  // ์ถœ๋ ฅ: "olleh"
    }
}

 

StringBuilder ๊ฐ์ฒด๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•œ ์ด์œ ๋Š”
๋ฌธ์ž์—ด์„ ๋’ค์ง‘๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ž๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฌธ์ž์—ด(String)์€ ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด์ด๋ฏ€๋กœ, ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€์ ์ธ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

1. String์€ ๋ถˆ๋ณ€ ๊ฐ์ฒด (Immutable Object)
  • ์ž๋ฐ”์—์„œ String ๊ฐ์ฒด๋Š” ๋ถˆ๋ณ€(immutable)์ด๋‹ค.
  • ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๋ชจ๋“  ์ž‘์—…์€ ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
• ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌธ์ž์—ด์— ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๊ธฐ์กด ๋ฌธ์ž์—ด์„ ์ˆ˜์ •ํ•˜๋Š” ๋Œ€์‹ , ์ˆ˜์ •๋œ ๋‚ด์šฉ์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2. StringBuilder๋Š” ๊ฐ€๋ณ€ ๊ฐ์ฒด (Mutable Object)
StringBuilder๋Š” ๋ฌธ์ž์—ด์„ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ฐ€๋ณ€(mutable) ๊ฐ์ฒด์ด๋‹ค.
• ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์— ๋งค์šฐ ํšจ์œจ์ ์ด๋‹ค.
• ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€, ์‚ญ์ œ, ์‚ฝ์ž…ํ•˜๋Š” ์ž‘์—…์ด ๋งŽ์€ ๊ฒฝ์šฐ StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ ๋ฉด์—์„œ ๋” ์ข‹๋‹ค.

3. ์™œ StringBuilder๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€?
  - ์„ฑ๋Šฅ์ ์ธ ์ด์œ 
• ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๋Š” ๊ณผ์ •์—์„œ๋Š” ๊ธฐ์กด ๋ฌธ์ž์—ด์— ๋ฌธ์ž๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.
• ๋งŒ์•ฝ String๋งŒ์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด, ๋งค๋ฒˆ ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๋ฅผ ๋” ๋งŽ์ด ์†Œ๋ชจํ–ˆ์„ ๊ฒƒ์ด๋‹ค.
-------
์œ„ ์ฝ”๋“œ์—์„œ StringBuilder๋ฅผ ๋ณ„๋„๋กœ ๋งŒ๋“  ์ด์œ ๋Š”:
1. ๋ฌธ์ž๋ฅผ ๋ณ€ํ˜•(์กฐ์ž‘)ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์— ํšจ์œจ์ ์œผ๋กœ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ.
2. String์˜ ๋ถˆ๋ณ€์„ฑ์œผ๋กœ ์ธํ•ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์ƒ์„ฑ๋˜๋Š” ๋น„ํšจ์œจ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ.
3. ๋ฐ˜๋ณต์ ์ธ ๋ฌธ์ž์—ด ์ถ”๊ฐ€ ์ž‘์—…์—์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ.

๋”ฐ๋ผ์„œ, ๋ฌธ์ž์—ด ์กฐ์ž‘(ํŠนํžˆ ์ถ”๊ฐ€, ์‚ญ์ œ, ์ˆ˜์ •)์ด ํ•„์š”ํ•˜๋‹ค๋ฉด StringBuilder๋‚˜ StringBuffer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 


(3) ๋ฌธ์ž์—ด์ด ๋Œ€์นญ(ํšŒ๋ฌธ)์ธ์ง€ ํ™•์ธ

 

๋ฌธ์ž์—ด์ด ์•ž๋’ค๋กœ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๋Š” ์˜ˆ์‹œ.

public class Main {
    public static void main(String[] args) {
        String str = "racecar";
        boolean isPalindrome = true;

        for (int i = 0; i < str.length() / 2; i++) {
            if (str.charAt(i) != str.charAt(str.length() - 1 - i)) {
                isPalindrome = false;
                break;
            }
        }

        System.out.println("Is palindrome: " + isPalindrome);  // ์ถœ๋ ฅ: true
    }
}

 


5. ์ฃผ์˜์ 

์ธ๋ฑ์Šค ์ดˆ๊ณผ ๋ฐฉ์ง€:

ํ•ญ์ƒ str.length()๋ฅผ ํ™•์ธํ•ด ์ธ๋ฑ์Šค๊ฐ€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ž ๋‹จ์œ„์˜ ์ž‘์—…:

charAt์€ ๋‹จ์ผ ๋ฌธ์ž์— ๋Œ€ํ•œ ์ž‘์—…์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.

์—ฌ๋Ÿฌ ๋ฌธ์ž๋ฅผ ๋น„๊ตํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ(substring, replace ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

6. ์š”์•ฝ

• charAt: ๋ฌธ์ž์—ด์˜ ํŠน์ • ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋‹จ์ผ ๋ฌธ์ž๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
• ์‚ฌ์šฉ๋ฒ•: str.charAt(index) (0-based ์ธ๋ฑ์Šค).
• ํ™œ์šฉ:
  -  ํŠน์ • ์œ„์น˜์˜ ๋ฌธ์ž ํ™•์ธ
  -  ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๋ฌธ์ž ๋‹จ์œ„ ์ž‘์—… ์ˆ˜ํ–‰
  -  ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ, ๋ฌธ์ž ๊ฐœ์ˆ˜ ์„ธ๊ธฐ ๋“ฑ

 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜๊ธฐ!

+ Recent posts