Search

๋ฐ˜๋ณต์ž ํŒจํ„ด

๋ฐ˜๋ณต์ž ํŒจํ„ด (Iterator Pattern)

์ปฌ๋ ‰์…˜์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํ–‰์œ„ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์˜ ๊ตฌํ˜„ ๋ฐฉ์‹๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋ชฉ์ 

โ€ข
์ปฌ๋ ‰์…˜์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ˆจ๊ธฐ๋ฉด์„œ ๋ชจ๋“  ์š”์†Œ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ œ๊ณต
โ€ข
์„œ๋กœ ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜๋“ค์„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ‘œ์ค€ํ™”๋œ ์ ‘๊ทผ๋ฒ• ์ œ์‹œ
โ€ข
์ปฌ๋ ‰์…˜์˜ ์ˆœํšŒ ๋กœ์ง์„ ์บก์Šํ™”ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌ

ํŠน์ง•

โ€ข
๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP) ์ค€์ˆ˜: ์ˆœํšŒ ์ฑ…์ž„์„ ๋ณ„๋„ ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌ
โ€ข
๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP) ์ค€์ˆ˜: ๊ธฐ์กด ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ์ƒˆ๋กœ์šด ์ˆœํšŒ ๋ฐฉ์‹ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
โ€ข
์ปฌ๋ ‰์…˜๊ณผ ์ˆœํšŒ ๋™์ž‘์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ

์˜ˆ์‹œ ์ฝ”๋“œ

// Iterator ์ธํ„ฐํŽ˜์ด์Šค interface Iterator<T> { boolean hasNext(); T next(); } // Collection ์ธํ„ฐํŽ˜์ด์Šค interface Collection<T> { Iterator<T> iterator(); } // ๊ตฌ์ฒด์ ์ธ ์ปฌ๋ ‰์…˜ ๊ตฌํ˜„ class NumberCollection implements Collection<Integer> { private Integer[] numbers; public NumberCollection(Integer[] numbers) { this.numbers = numbers; } @Override public Iterator<Integer> iterator() { return new NumberIterator(); } // ๊ตฌ์ฒด์ ์ธ Iterator ๊ตฌํ˜„ private class NumberIterator implements Iterator<Integer> { private int index = 0; @Override public boolean hasNext() { return index < numbers.length; } @Override public Integer next() { return numbers[index++]; } } }
Java
๋ณต์‚ฌ

์ฝ”๋“œ ์„ค๋ช…

์œ„ ์ฝ”๋“œ๋Š” ๋ฐ˜๋ณต์ž ํŒจํ„ด์˜ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ˜„์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:
โ€ข
Iterator ์ธํ„ฐํŽ˜์ด์Šค: ์ˆœํšŒ์— ํ•„์š”ํ•œ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
โ—ฆ
hasNext(): ๋‹ค์Œ ์š”์†Œ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ
โ—ฆ
next(): ๋‹ค์Œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ํฌ์ธํ„ฐ๋ฅผ ์ด๋™
โ€ข
Collection ์ธํ„ฐํŽ˜์ด์Šค: ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ์ปฌ๋ ‰์…˜์ด ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
โ—ฆ
iterator(): Iterator ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜
โ€ข
NumberCollection ํด๋ž˜์Šค: ๊ตฌ์ฒด์ ์ธ ์ปฌ๋ ‰์…˜์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
โ—ฆ
์ •์ˆ˜ ๋ฐฐ์—ด์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ
โ—ฆ
๋‚ด๋ถ€ ํด๋ž˜์Šค๋กœ NumberIterator๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ˆœํšŒ ๊ธฐ๋Šฅ ์ œ๊ณต
์ด ๊ตฌํ˜„์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” ์ปฌ๋ ‰์…˜์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์•Œ ํ•„์š” ์—†์ด Iterator ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

// ์‚ฌ์šฉ ์˜ˆ์‹œ Integer[] numbers = {1, 2, 3, 4, 5}; NumberCollection collection = new NumberCollection(numbers); Iterator<Integer> iterator = collection.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
Java
๋ณต์‚ฌ