๐Ÿ“Œ[๋””์ž์ธ ํŒจํ„ด] ์ดํ„ฐ๋ ˆ์ดํ„ฐ (Iterator)

๋ชจ๊น…ยท2023๋…„ 10์›” 10์ผ
0

๐Ÿ“– 01. Iterator๋ž€?

  • ์ง‘ํ•ฉ ๊ฐ์ฒด ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ˆœํšŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด์„ ์˜๋ฏธํ•œ๋‹ค.
    -> ์ง‘ํ•ฉ ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ์ˆœํšŒ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.


< ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํด๋ž˜์Šค ๊ตฌ์กฐ๋„ >


  • Iterator - ์ง‘ํ•ฉ์ฒด์˜ ์š”์†Œ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
  • ConcreateIterator - Iterator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•จ
  • Aggregate - ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ง‘ํ•ฉ์ฒด, Iterator์˜ ์—ญํ• ์„ ๋งŒ๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •ํ•จ.
  • ConcreateAggregate - Aggreagate ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค

๐Ÿ“– 02. Iterator ํŒจํ„ด ์‚ฌ์šฉ ์˜ˆ์‹œ

1. ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด ์ ์šฉ ์ „

  • @Getter, @AllArgsConstructor
    -> Lombok ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฐธ๊ณ 

  • ํ˜„์žฌ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” Board ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค.
List<Post> posts = board.getPosts(); ...
  • Board ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ž๋ฃŒ๊ตฌ์กฐ(List)๋ฅผ ๋ฐ”๊พธ๊ฒŒ ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ๋„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋œ๋‹ค.

2. ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํŒจํ„ด ์ ์šฉ ํ›„

  • Board ํด๋ž˜์Šค ๋‚ด๋ถ€์— iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์ž.
    -> ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ Board ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ๋ชฐ๋ผ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค!

  • "๋งŒ์•ฝ Board ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” List<Post> ๋ฅผ ์ƒ์„ฑ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์กฐํšŒํ•˜๊ณ  ์‹ถ๋‹ค." ๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์˜ ๋ณ€๊ฒฝ์š”์ฒญ์ด ์žˆ๋‹ค๋ฉด Board ์—์„œ ๋‹ค๋ฅธ Iterator ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ์–ด ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.


Board.Class

Client.class

-> Board ๋Š” ์ง€๊ธˆ ConcreateAggregate ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ๋ณ€๊ฒฝ๋งˆ์ €๋„ ์ตœ์†Œํ™” ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Aggreate ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” Aggregate์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ๋ฐ”๋ผ๋ณธ๋‹ค๋ฉด ์กฐ๊ธˆ ๋” ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ•˜ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“– 03. Iterator ํŒจํ„ด ์žฅ๋‹จ์ 

  • ์žฅ์ 
  1. ์ง‘ํ•ฉ์ฒด ํด๋ž˜์Šค์˜ ์‘์ง‘๋„๋ฅผ ๋†’์—ฌ์ค€๋‹ค.
    -> ํด๋ž˜์Šค ์‘์ง‘๋„๋ž€? : ํ”„๋กœ๊ทธ๋žจ์˜ ํ•œ ์š”์†Œ๊ฐ€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์–ผ๋งˆ๋งŒํผ์˜ ์—ฐ๊ด€๋œ ์ฑ…์ž„๊ณผ ์•„์ด๋””์–ด๊ฐ€ ๋ญ‰์ณ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๋„.
    -> ํด๋ž˜์Šค ์‘์ง‘๋„๊ฐ€ ๋†’์€ ํด๋ž˜์Šค์˜ ํŠน์ง•์€ ์•„๋ž˜๋กœ

  2. ์ง‘ํ•ฉ์ฒด ๋‚ด์—์„œ ์–ด๋–ค ์‹์œผ๋กœ ์ผ์ด ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ์•Œ ํ•„์š” ์—†์ด, ์ง‘ํ•ฉ์ฒด ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

  3. ๋ชจ๋“  ํ•ญ๋ชฉ์— ์ผ์ผ์ด ์ ‘๊ทผํ•˜๋Š” ์ž‘์—…์„ ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๊ฐ์ฒด์—์„œ ๋งก๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ์ง‘ํ•ฉ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•ด์งˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ง‘ํ•ฉ์ฒด์—์„œ๋Š” ๋ฐ˜๋ณต ์ž‘์—…์—์„œ ์†์„ ๋–ผ๊ณ  ์›๋ž˜ ์ž์‹ ์ด ํ•  ์ผ์—๋งŒ ์ „๋…ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋‹จ์ 
  1. ๋‹จ์ˆœํ•œ ์ˆœํšŒ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ํด๋ž˜์Šค๋งŒ ๋งŽ์•„์ ธ ๊ตฌ์กฐ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“– 04. ์ •๋ฆฌ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆœํšŒํ•˜๋Š” ๊ฐ์ฒด์˜ ๊ตฌํ˜„๋ถ€๋ฅผ ๋ชฐ๋ผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์— ์šฉ์ดํ•ด์ง„๋‹ค.



  • ์‘์ง‘๋„๊ฐ€ ๋†’์€ ํด๋ž˜์Šค์˜ ํŠน์ง•
  1. ํด๋ž˜์Šค์˜ ๋ชฉ์ ์— ๋ถ€ํ•ฉํ•˜๋Š”, ๊ฐ™์€ ๊ธฐ๋Šฅ์˜์—ญ(Function area)์˜ ๋ฉ”์†Œ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  2. ๋ฉ”์„œ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘๋‹ค.
    -> ์˜ค๋กœ์ง€ ์ž์‹ ๋งŒ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ฑ…์ž„์„ ๋ถ€์—ฌ ๋ฐ›์•˜๋‹ค๋Š” ๋œป์ด๋‹ค.
  3. ํ˜ผ์ž ๋„ˆ๋ฌด ๋งŽ์€ ์ผ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ํ˜‘๋ ฅํ•œ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ํ•œ ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ์„ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ์‘์ง‘๋„๊ฐ€ ๋‚ฎ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.
    -> ๊ธฐ๋Šฅ์„ ๋‚˜๋ˆ ์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์‘์ง‘๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค!




์ฐธ๊ณ  ์ž๋ฃŒ)
https://lazineer.tistory.com/93 - ๊ฒŒ์œผ๋ฅธ์—”์ง€๋‹ˆ์–ด
https://thalals.tistory.com/425 - ํž˜์ฐจ๊ฒŒ, ์—ด์‹ฌํžˆ ๊ณต๋Œ€์ƒ

profile
๋ฉˆ์ถ”์ง€ ์•Š๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€