Last updated
Last updated
๋ฐ๋ณต์ ํจํด
์ ๊ฐ์ฒด ์งํฉ์ ์์๋ค์ ์ผ๊ด์ ์ผ๋ก, ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋๋ก ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํจํด์ด๋ค.
์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ด ๊ด๊ณ ์๋ ๋ถ๋ถ์ ๋ณ๊ฒฝ์ ์ด๋ํ์ง ์๋๋ก ํ๊ธฐ ์ํด ์งํฉ์ ์์๋ฅผ ๋ณ๋์ ๊ด๋ฆฌ ๊ฐ์ฒด(Iterator) ์์ ์บก์ํํ๋ค. ์ฆ, Iterator๋ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ ๊ฐ ์ค์ฌ์ ์ญํ ์ ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ์กด์ ์๋์ ๊ฐ์ด LinkedList ์๋ฃ๊ตฌ์กฐ๋ฅผ ํตํด ๋ฐ์ดํฐ ์งํฉ์ ์ฒ๋ฆฌํ๊ณ ์์๋ค๊ณ ํ์.
๊ทธ๋ฌ๋ค๊ฐ ์๊ตฌ์ ๋ณ๊ฒฝ์ ์ํด ์๋ฃ๊ตฌ์กฐ๋ฅผ BalancedTree๋ก ๋ณ๊ฒฝํ๊ฒ ๋์๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ธฐ์กด์ LinkedList๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ์ฝ๋๋ค์ ๋ชจ๋ ๋ณํ๊ฐ ์ผ์ด๋๊ฒ ๋๋ค.
๋ ๊ฐ๋ ์๋ก ๋ค๋ฅธ ์๋ฃํ์์ ๋ฌผ๋ก ์ด๊ณ , ์๋ก ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๊ฐ์ง ๊ฒ์ด๋ฏ๋ก ์ด ๋ณํ์ ํฌ๊ธฐ๋ ๋งค์ฐ ์ปค์ง ์ ์๋ค.
์ด๋ฌํ ์ฌํ๋ฅผ ๋ง๊ธฐ ์ํด, ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋์ง ์๋ํ๊ณ ์ด๋ค์ ๊ณตํต ๊ธฐ๋ฅ์ ์ ์ํ ๊ด๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋๋ก ํ๋ค.
Aggregate
- ์์๋ค์ ์งํฉ์ ๋ค๋ฃจ๊ธฐ ์ํ ๊ณตํต ๊ธฐ๋ฅ์ ์ ์ํ ์ธํฐํ์ด์ค
ConcreteAggregate
- ์์๋ค์ ์งํฉ์ ๋ค๋ฃจ๋ ํด๋์ค (ArrayList ๋ฑ)
Iterator
- ์์๋ค์ ์งํฉ์ ์ผ๊ด์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํ ์ธํฐํ์ด์ค
ConcreteIterator
- Iterator๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ก, Aggregate์ ์ผ๋์ผ ๋์ํ๋ฉฐ Aggregate์ ์ํด ์์ฑ๋๋ค. (ex: LinkedList.iterator()๋ฅผ ํตํด ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ดํฐ๋ ์ดํฐ ์์ฑ)
Client
- Aggregate๋ฅผ ๋ง๋ค๊ณ ์ด๋ก๋ถํฐ Iterator๋ฅผ ์์ฑํด๋ด๋ ํด๋์ค
Java ๊ธฐ์ค ๋๋ถ๋ถ์ ๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ์ Iterator๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๊ฐ ์ ์๋์ด ์๋ค.