
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 ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ง ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ๋ฉด ๋๋ค!