[ Programming > Design Pattern ]
[๋์์ธ ํจํด] Iterator ํจํด
Iterator ํจํด
Iterator ํจํด์ ๊ตฌํํด์ ์๋ก ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ํํ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ ค์. ์ด ํจํด์ผ๋ก ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์์ ํ์ง ์๊ณ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ด์.
Iterator ํจํด์ด ์ ํ์ํ๊ฐ์?
์ค๋ฌด์์ ์ด๋ฐ ์ํฉ์ ์์ฃผ ๋ง์ฃผ์น ์ ์์ด์. ๋ ๊ฐ๋ฐํ์ด ๋น์ทํ ๊ธฐ๋ฅ์ ๊ฐ๊ฐ ๊ฐ๋ฐํ๋๋ฐ, ํ ํ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ํ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ด์. ์ด์ ๋ ๋ฐ์ดํฐ๋ฅผ ํฉ์ณ์ ๋ณด์ฌ์ค์ผ ํ๋๋ฐ ๋ฌธ์ ๊ฐ ์๊ฒจ์.
Aํ - Array๋ก ์๋ฃ ๊ตฌํ | Bํ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํ |
---|---|
|
|
Client - ๋ ํ์ Item Collection์ ํฉ์ณ์ ์ถ๋ ฅ | |
|
์ Client ์ฝ๋์ ๋ฌธ์ ์ ์ด ๋ณด์ด์๋์?
๋ฌธ์ ์
๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ ์ฝ๋๊ฐ ์์ ํ ๋ฌ๋ผ์
์๋ก์ด ์๋ฃ๊ตฌ์กฐ(ํธ๋ฆฌ, ์คํ ๋ฑ)๊ฐ ์ถ๊ฐ๋๋ฉด ๋ ๋ค๋ฅธ ์ํ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํด์
ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ๊ฐ ์๋ฃ๊ตฌ์กฐ์ ๋ด๋ถ ๊ตฌํ์ ์์์ผ ํด์
์ฝ๋ ์ค๋ณต์ด ๋ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์
๊ทธ๋ฌ๋ฉด ์์ ๊ฐ์ ๋ฌธ์ ์ ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น์? ๋ฐ๋ก Iterator ํจํด์ ์ฌ์ฉํ๋ฉด Collection์ ๊ฐ์ ์ธํฐํ์ด์ค๋ก ์ํํ๊ฒ ๋ง๋ค์ด Client๋ ๊ฐ ํ์ ๋ด๋ถ ๊ตฌํ์ ๋ํด์ ์ ํ์๊ฐ ์์ด์ ธ์. ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๋ฐฉ์์ Collection์ผ๋ก Cํ์ด ์ถ๊ฐ ๊ตฌํ์ ํด๋ Iterator ์ธํฐํ์ด์ค ๋ฐฉ์์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์๊ฒ๋๋ฉด ๋ง์ฐฌ๊ฐ์ง๋ก ๋ด๋ถ ๊ตฌํ์ ์ ํ์๊ฐ ์์ด์ ธ์.
Iterator ํจํด์ผ๋ก ํด๊ฒฐํ๊ธฐ
Iterator ํจํด์ ์ ์ฉํ๋ฉด ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ํํ ์ ์์ด์.
Aํ ์ดํฐ๋ ์ดํฐ | Bํ ์ดํฐ๋ ์ดํฐ |
---|---|
|
|
Client - Iterator ์ ์ฉํ ์ฝ๋ | |
|
์ด๋์? Client๋ Iterator ์ธํฐํ์ด์ค๋ง ์์์ผํ๋ ๊ฐ ํ์ด ์ด๋ค ์๋ฃํ์ ์ผ๋์ง ์ ํ ์ ํ์๊ฐ ์์ด์ก์ต๋๋ค.
Iterator ํจํด ํด๋์ค ๋ค์ด์ด๊ทธ๋จ
Iterator ํจํด์ ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ด ์ด๋ป๊ฒ ๋๋์ง ๋ณด์ฌ๋๋ฆด๊ฒ์.

client๋ createInterator() ํจ์๋ฅผ ๊ตฌํํ๋ Aggregate์ด๋ผ๋ ๊ณตํต๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฐ์ฒด ์ปฌ๋ ์ ์ ๊ตฌํ๊ณผ ๋ถ๋ฆฌ๋ ์ ์์ด์. ๊ทธ๋ฆฌ๊ณ Iterator ์ธํฐํ์ด์ค๋ง์ ์ฌ์ฉํด Collection์ ์ํํ ์ ์๊ฒ ๋ฉ๋๋ค.
Iterator ํจํด vs ์ง์ ์ ๊ทผ ๋น๊ต
๊ตฌ๋ถ | Iterator ํจํด | ์ง์ ์ ๊ทผ |
---|---|---|
์ฝ๋ ํต์ผ์ฑ | ๋ชจ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ํ | ์๋ฃ๊ตฌ์กฐ๋ง๋ค ๋ค๋ฅธ ์ฝ๋ ํ์ |
์ ์ง๋ณด์ | ์ ์๋ฃ๊ตฌ์กฐ ์ถ๊ฐ ์ ๊ธฐ์กด ์ฝ๋ ์์ ๋ถํ์ | ๋ชจ๋ ์ฌ์ฉ์ฒ๋ฅผ ์ฐพ์ ์์ ํ์ |
์บก์ํ | ๋ด๋ถ ๊ตฌ์กฐ ๊ฐ์ถค | ๋ด๋ถ ๊ตฌ์กฐ ๋ ธ์ถ |
ํ์ฅ์ฑ | ์ Iterator๋ง ์ถ๊ฐํ๋ฉด ๋จ | ์กฐ๊ฑด๋ฌธ์ด ๊ณ์ ๋์ด๋จ |
๋ง๋ฌด๋ฆฌ
์ด๋ ๊ฒ Iterator(๋ฐ๋ณต์) ํจํด์ ํตํด์ ์๋ก ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ์ธ Collection์ ํต์ผ๋ ์ธํฐํ์ด์ค๋ก ๋ค๋ฃฐ ์ ์๊ฒ ๋ง๋ค์ด ๋ดค์ต๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ํ์๊ฐ ์์ด์ง๋ ์บก์ํ๊ฐ ๋๊ณ , ์ ์ง๋ณด์ ๊ด์ ์์๋ ์๋ก์ด ์๋ฃํ์ด ์ถ๊ฐ๋๋ Iterator๋ง ์ถ๊ฐํ๊ณ Client ์ฝ๋๋ฅผ ๊ณ ์น์ง ์์๋ ๋๋ OCP ์์น๋ ์ ๋ฐ๋ฅด๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํญ์ Collection์ ๋ค๋ฃฐ๋ ํจํด์ ์ฌ์ฉํ๋ฉด ๋ ๊น์ฌ?? ์๋์ ๋จ์ผ ์๋ฃ๊ตฌ์กฐ๋ง ์ฌ์ฉํ๋ค๊ฑฐ๋, ์ํ ๋ก์ง์ด ํ ๊ณณ๋ง ์๋ค๋๊ฐ, ์๋๋ฉด ๋ด๋ถ ๋ฐ๋ณต์(internal iterator[ex. map, foreach])๋ก ์ถฉ๋ถํ ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ฉด ํ์์์ต๋๋ค. ์๋ฌดํผ Iterator ํจํด์ ์ง์ ํ ๊ฐ์น๋ ์๋ก ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํต์ผ๋ ์ธํฐํ์ด์ค๋ก ๋ค๋ฃฐ ์ ์๊ฒ ๋๋ค๋ ์ ์ด์์. ์ด๋ฅผ ํตํด ์๋ฃ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ ์ํฅ๋ฐ์ง ์๊ณ , ํ์ฅ๋ ์ฌ์์ง๋๋ค.