Iterator Pattern

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

๋ฐ˜๋ณต์ž ํŒจํ„ด์€ ๊ฐ์ฒด ์ง‘ํ•ฉ์˜ ์š”์†Œ๋“ค์„ ์ผ๊ด„์ ์œผ๋กœ, ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ณ€๊ฒฝ์ด ๊ด€๊ณ„ ์—†๋Š” ๋ถ€๋ถ„์˜ ๋ณ€๊ฒฝ์„ ์ดˆ๋ž˜ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ง‘ํ•ฉ์˜ ์š”์†Œ๋ฅผ ๋ณ„๋„์˜ ๊ด€๋ฆฌ ๊ฐ์ฒด(Iterator) ์•ˆ์— ์บก์Аํ™”ํ•œ๋‹ค. ์ฆ‰, Iterator๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ๋ฐ์ดํ„ฐ ๊ฐ„ ์ค‘์žฌ์ž ์—ญํ• ์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์‹œ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ์กด์— ์•„๋ž˜์™€ ๊ฐ™์ด LinkedList ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๊ณ  ํ•˜์ž.

Use-Linked-List

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์š”๊ตฌ์˜ ๋ณ€๊ฒฝ์— ์˜ํ•ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ BalancedTree๋กœ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ์กด์— LinkedList๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ ์ฝ”๋“œ๋“ค์— ๋ชจ๋‘ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

Use-Balanced-Tree

๋‘ ๊ฐœ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์ž„์€ ๋ฌผ๋ก ์ด๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ด๋ฏ€๋กœ ์ด ๋ณ€ํ™”์˜ ํฌ๊ธฐ๋Š” ๋งค์šฐ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์‚ฌํƒœ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด, ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์€๋‹‰ํ•˜๊ณ  ์ด๋“ค์˜ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ ๊ด€๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ

Iterator-Pattern
  • Aggregate - ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค

  • ConcreteAggregate - ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ์„ ๋‹ค๋ฃจ๋Š” ํด๋ž˜์Šค (ArrayList ๋“ฑ)

  • Iterator - ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ์„ ์ผ๊ด„์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค

  • ConcreteIterator - Iterator๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋กœ, Aggregate์™€ ์ผ๋Œ€์ผ ๋Œ€์‘ํ•˜๋ฉฐ Aggregate์— ์˜ํ•ด ์ƒ์„ฑ๋œ๋‹ค. (ex: LinkedList.iterator()๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ์ƒ์„ฑ)

  • Client - Aggregate๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋กœ๋ถ€ํ„ฐ Iterator๋ฅผ ์ƒ์„ฑํ•ด๋‚ด๋Š” ํด๋ž˜์Šค

ํŠน์ง•

  • Java ๊ธฐ์ค€ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋ณธ ์ž๋ฃŒ๊ตฌ์กฐ์— Iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค.

Last updated