Iterable์€ ์ž๋ฐ”์—์„œ “๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ” ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด, for-each ๋ฌธ๋ฒ•์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

1. Iterable์˜ ์ •์˜

Iterable์€ ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ์†ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ,

๋ฐ˜๋ณต(iteration)์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์ด ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

 

Iterable์˜ ํ•ต์‹ฌ ๋ฉ”์„œ๋“œ

 

Iterable ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ์žˆ๋‹ค:

public interface Iterable<T> {
    Iterator<T> iterator();  // ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜
}

iterator(): ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฐ˜๋ณต(iterate)ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” Iterator ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


2. Iterable์„ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค

์ž๋ฐ”์—์„œ ์ปฌ๋ ‰์…˜์€ ๋Œ€๋ถ€๋ถ„ Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

List (ArrayList, LinkedList ๋“ฑ)

Set (HashSet, TreeSet ๋“ฑ)

Queue (PriorityQueue ๋“ฑ)

 

์ด ํด๋ž˜์Šค๋“ค์€ ๋ชจ๋‘ Iterable์„ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ for-each ๋ฌธ๋ฒ•์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์˜ˆ์ œ: Iterable์„ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด์—์„œ for-each ์‚ฌ์šฉ

List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");

for (String name : names) {  // for-each ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    System.out.println(name);
}

 

3. Iterable์ด๋ž€? ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด

Iterable์„ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋Š” for-each ๋ฌธ๋ฒ•์—์„œ ์ž๋™์œผ๋กœ ๋‚ด๋ถ€์˜ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ArrayList๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Iterator๋ฅผ ์‚ฌ์šฉํ•ด ์š”์†Œ๋ฅผ ์ˆœํšŒํ•œ๋‹ค.

 

Iterator์˜ ์—ญํ• 

Iterable์„ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Iterator๋ผ๋Š” ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {  // ๋ฐ˜๋ณต์ž๊ฐ€ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ
    String name = iterator.next();  // ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ด
    System.out.println(name);
}

 


4. StringBuilder๋Š” ์™œ Iterable์ด ์•„๋‹Œ๊ฐ€?

StringBuilder๋Š” Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— for-each ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. 

StringBuilder๋Š” ๋ฌธ์ž์—ด ์กฐ์ž‘์„ ๋ชฉ์ ์œผ๋กœ ์„ค๊ณ„๋œ ํด๋ž˜์Šค์ด๋ฉฐ, ์ปฌ๋ ‰์…˜์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐ์ฒด์˜ ์ง‘ํ•ฉ์„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋น„๊ต: ArrayList์™€ StringBuilder

ํŠน์„ฑ ArrayList (Iterable ๊ตฌํ˜„) StringBuilder (Iterable ๋ฏธ๊ตฌํ˜„)
๋ชฉ์   ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๊ด€๋ฆฌ  ๋ฌธ์ž์—ด์„ ๋™์ ์œผ๋กœ ์กฐ์ž‘
for-each ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฐ€๋Šฅ   ๋ถˆ๊ฐ€๋Šฅ
Iterator ์ œ๊ณต ์—ฌ๋ถ€ ์ œ๊ณต  ์ œ๊ณตํ•˜์ง€ ์•Š์Œ

 


 

5. Iterable์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ

Iterable์€ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ปค์Šคํ…€ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

class MyIterable implements Iterable<Integer> {
    private int[] numbers = {1, 2, 3, 4, 5};

    @Override
    public Iterator<Integer> iterator() {
        return new Iterator<>() {
            private int index = 0;

            @Override
            public boolean hasNext() {
                return index < numbers.length;
            }

            @Override
            public Integer next() {
                return numbers[index++];
            }
        };
    }
}

public class Main {
    public static void main(String[] args) {
        MyIterable myIterable = new MyIterable();

        for (int number : myIterable) {  // for-each ์‚ฌ์šฉ ๊ฐ€๋Šฅ
            System.out.println(number);
        }
    }
}

 


 ์š”์•ฝ
• Iterable์€ ๋ฐ˜๋ณต(iteration)์„ ์ง€์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
• Iterable์„ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋Š” for-each ๋ฌธ๋ฒ•์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
• StringBuilder๋Š” Iterable์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ for-each ๋ฌธ๋ฒ•์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
• ์ปฌ๋ ‰์…˜(ArrayList, HashSet ๋“ฑ)์€ Iterable์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์–ด for-each๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

StringBuilder๊ฐ€ Iterable์ด ์•„๋‹ˆ๋ผ์„œ for-each ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ง์€

์ž๋ฐ”์—์„œ for-each ๋ฌธ๋ฒ•์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋ฉด ๋” ๋ช…ํ™•ํ•ด์ง„๋‹ค. 

 

1. ์ž๋ฐ”์˜ for-each ๋ฌธ๋ฒ•

์ž๋ฐ”์˜ for-each๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋œ๋‹ค:

for (ํƒ€์ž… ๋ณ€์ˆ˜ : ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด) {
    // ๋ฐ˜๋ณตํ•  ์ฝ”๋“œ
}

 

for-each๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

๋ฐฐ์—ด: ๋ฐฐ์—ด์€ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

Iterable ๊ตฌํ˜„ ๊ฐ์ฒด: ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜(ArrayList, HashSet ๋“ฑ)์€ Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ for-each์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

for-each๊ฐ€ ๋™์ž‘ํ•˜๋ ค๋ฉด ํ•„์š”ํ•œ ์กฐ๊ฑด

1. ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

2. ๋‚ด๋ถ€์ ์œผ๋กœ Iterator๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

 

 


2. StringBuilder๋Š” Iterable์ด ์•„๋‹ˆ๋‹ค

StringBuilder๋Š” ๋ฌธ์ž์—ด์„ ๋™์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ผ ๋ฟ, 

์ปฌ๋ ‰์…˜์ด ์•„๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๋‹ค.

์ด๊ฒƒ์ด ๊ณง for-each ๋ฌธ๋ฒ•์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ด๋‹ค.

 

์˜ˆ์ œ: StringBuilder์—์„œ for-each๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด

StringBuilder sb = new StringBuilder("hello");

for (char c : sb) {  // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
    System.out.println(c);
}

 

์œ„ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด์œ ๋Š”:

StringBuilder๋Š” ์ปฌ๋ ‰์…˜์ด ์•„๋‹ˆ๋ฉฐ, Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๋‹ค.

   ๋”ฐ๋ผ์„œ for-each ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.


 

3. StringBuilder๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•

StringBuilder์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ์ˆœํšŒํ•˜๋ ค๋ฉด for-each ๋Œ€์‹  ์ผ๋ฐ˜์ ์ธ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด:

StringBuilder sb = new StringBuilder("hello");

for (int i = 0; i < sb.length(); i++) {
    char c = sb.charAt(i);  // ๊ฐ ๋ฌธ์ž๋ฅผ ๊ฐ€์ ธ์˜ด
    System.out.println(c);
}

 

 

์ด ์ฝ”๋“œ๋Š” StringBuilder์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ถœ๋ ฅํ•œ๋‹ค.


4. Iterable๊ณผ StringBuilder์˜ ์ฐจ์ด

ํŠน์„ฑ  Iterable ๊ฐ์ฒด (e.g., List, Set)  StringBuilder
for-each ์‚ฌ์šฉ ๊ฐ€๋Šฅ? ๊ฐ€๋Šฅ (Iterable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„) ๋ถˆ๊ฐ€๋Šฅ (Iterable ๋ฏธ๊ตฌํ˜„)
๋ชฉ์   ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ (์ปฌ๋ ‰์…˜ ๊ด€๋ฆฌ)  ๋ฌธ์ž์—ด์˜ ๋™์  ์กฐ์ž‘
๋Œ€ํ‘œ ๋ฉ”์„œ๋“œ  iterator(), add(), remove()  append(), insert(), delete()

 

 

 


์ •๋ฆฌ

StringBuilder๋Š” ๋ฌธ์ž์—ด ์กฐ์ž‘์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ํด๋ž˜์Šค์ด๋ฉฐ, ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜์ฒ˜๋Ÿผ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ for-each ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ๋Œ€์‹  for ๋ฃจํ”„์™€ charAt() ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ๋ฌธ์ž๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•œ๋‹ค.

for-each๋Š” Iterable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค!

+ Recent posts