iterator ?

์ดํ„ฐ๋ ˆ์ดํ„ฐ

์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ์š”์†Œ๋“ค์˜ ์ปฌ๋ ‰์…˜์„ ์ˆœ์„œ๋Œ€๋กœ ์‚ดํŽด๋ณด๋Š” ๋ฐ ํŠนํžˆ ์œ ์šฉํ•˜๋‹ค. ์ฝ”ํ‹€๋ฆฐ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ธ๋ฑ์Šค๋กœ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์š”์†Œ๋Š” ์ˆœ์„œ๋Œ€๋กœ๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋” ๋งŽ์€ ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” hasNext() ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

  • ์š”์†Œ๋Š” ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์ „ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋ฐฉ๋ฒ•์€ ์—†๋‹ค.

  • ์žฌ์„ค์ •(reset)ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ•œ ๋ฒˆ๋งŒ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

val iterator : Iterator<Any> = iterator {
		yield(1)
		yield(10L)
		yield("Hello")
}

์ดํ„ฐ๋ ˆ์ดํ„ฐ์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ

fun main(args: Array<String>) {
		val iterator = iterator {
				println("yielding 1")
				println("yielding 1")
				println("yielding 1")
				println("yielding 1")
		}

		iterator.next()

		if (iterator.hasNext()) {
				println("iterator has next")
				iterator.next()
		}
}

hasNext()๊ฐ€ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋Ÿฐํƒ€์ž„์€ ์ฝ”๋ฃจํ‹ด ์‹คํ–‰์„ ์žฌ๊ฐœํ•œ๋‹ค. ์ƒˆ๋กœ์šด ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ํ•จ์ˆ˜๋Š” true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋” ์ด์ƒ ๊ฐ’์ด ์—†์–ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ํ•จ์ˆ˜๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์‹œํ€€์Šค

์ผ์‹œ ์ค‘๋‹จ ์‹œํ€€์Šค๋Š” ์ผ์‹œ ์ค‘๋‹จ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์™€๋Š” ์ƒ๋‹นํžˆ ๋‹ค๋ฅด๋‹ค.

  • ์ธ๋ฑ์Šค๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

  • ์ƒํƒœ๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ƒํ˜ธ ์ž‘์šฉํ•œ ํ›„ ์ž๋™์œผ๋กœ ์žฌ์„ค์ •๋œ๋‹ค.

  • ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ๋กœ ๊ฐ’ ๊ทธ๋ฃน์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

์‹œํ€€์Šค๋Š” ์ƒํƒœ๊ฐ€ ์—†๋‹ค.

์ผ์‹œ ์ค‘๋‹จ ์‹œํ€€์Šค๋Š” ์ƒํƒœ๊ฐ€ ์—†๊ณ  ์‚ฌ์šฉ๋œ ํ›„์— ์žฌ์„ค์ •๋œ๋‹ค. ๋‹ค์Œ ์‹œํ€€์Šค๋ฅผ ์‚ดํŽด๋ณด์ž.

val sequence = sequence {
		for (i in 0..9) {
				println("Yielding $i")
				yield(i)
		}
}

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์ฝ์–ด๋ณด์ž.

for main(args: Array<String>) {
		println("Requesting  index 1")
		sequence.elementAt(1)
	
		println("Requesting  index 2")
		sequence.elementAt(2)

		println("Requesting  index 3")
		sequence.elementAt(3)
}

์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์‹œํ€€์Šค๋Š” ๊ฐ๊ฐ์˜ ํ˜ธ์ถœ๋งˆ๋‹ค ์š”์†Œ์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹คํ–‰๋จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํ”„๋กœ๋“€์„œ

์‹œํ€€์Šค์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์—๋Š” ์‹คํ–‰ ์ค‘์— ์ผ์‹œ ์ค‘๋‹จํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ œํ•œ์ด ์žˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ๋‹ค๋ฅธ ์ž‘์—…์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์ผ์‹œ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ด์„œ ์ด๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ ํฐ ์ œ์•ฝ์‚ฌํ•ญ์ด๋‹ค.

ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๋ ค๋ฉด ํ”„๋กœ๋“€์„œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ํ”„๋กœ๋“€์„œ์˜ ์‚ฌ์ƒ๊ณผ ์‚ฌ์šฉ๋ฒ•์€ ์ผ์‹œ ์ค‘๋‹จ ์‹œํ€€์Šค๋‚˜ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

  • ํ”„๋กœ๋“€์„œ๋Š” ๊ฐ’์ด ์ƒ์„ฑ๋œ ํ›„ ์ผ์‹œ ์ค‘๋‹จ๋˜๋ฉฐ, ์ƒˆ๋กœ์šด ๊ฐ’์ด ์š”์ฒญ๋  ๋•Œ ๋‹ค์‹œ ์žฌ๊ฐœ๋œ๋‹ค. ์ด๋Š” ์ผ์‹œ ์ค‘๋‹จ ์‹œํ€€์Šค ๋ฐ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์™€ ์œ ์‚ฌํ•˜๋‹ค.

  • ํ”„๋กœ๋“€์„œ๋Š” ํŠน์ • CoroutineContext๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ „๋‹ฌ๋˜๋Š” ์ผ์‹œ ์ค‘๋‹จ ๋žŒ๋‹ค์˜ ๋ณธ๋ฌธ์€ ์–ธ์ œ๋“ ์ง€ ์ผ์‹œ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์–ด๋Š ์‹œ์ ์—์„œ๋“  ์ผ์‹œ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ๋“€์„œ์˜ ๊ฐ’์€ ์ผ์‹œ ์ค‘๋‹จ ์—ฐ์‚ฐ์—์„œ๋งŒ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ฑ„๋„์„ ์‚ฌ์šฉํ•ด ์ž‘๋™ํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆผ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์š”์†Œ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ์ŠคํŠธ๋ฆผ์—์„œ ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋œ๋‹ค.

์š”์•ฝ

  • ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์ผ์‹œ ์ค‘๋‹จ๋˜๋Š” ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ ์ผ์‹œ ์ค‘๋‹จ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

  • ์‹œํ€€์Šค์˜ ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ƒํƒœ ๋น„ ์ €์žฅ์ด๋ฏ€๋กœ ๊ฐ ํ˜ธ์ถœ ํ›„ ์ž์ฒด์ ์œผ๋กœ ์žฌ์„ค์ •๋œ๋‹ค. ์ธ๋ฑ์Šค๋กœ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐ’์˜ ๊ทธ๋ฃน์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

  • ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ƒํƒœ๊ฐ€ ์žˆ๊ณ , ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด์ „ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ธ๋ฑ์Šค๋กœ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†๋‹ค.

  • ์‹œํ€€์Šค์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐ’์„ ์ƒ์„ฑํ•œ ํ›„์— ์ผ์‹œ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹คํ–‰์˜ ์ผ๋ถ€๋กœ ์ผ์‹œ ์ค‘๋‹จ๋  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ˆซ์ž์˜ ์‹œํ€€์Šค์™€ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…์ด ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค์— ์ ํ•ฉํ•˜๋‹ค.

  • ์‹œํ€€์Šค์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ์‹คํ–‰ ์ค‘์— ์ผ์‹œ ์ค‘๋‹จํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋น„์ค‘๋‹จ ์—ฐ์‚ฐ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœ๋“€์„œ๋Š” ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ์„ ํฌํ•จํ•ด ์–ธ์ œ๋“ ์ง€ ์ค‘๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœ๋“€์„œ๋Š” ์‹คํ–‰ ์ค‘์— ์ผ์‹œ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ผ์‹œ ์ค‘๋‹จ ์—ฐ์‚ฐ์ด๋‚˜ ์ฝ”๋ฃจํ‹ด์—์„œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœ๋“€์„œ๋Š” ์ฑ„๋„์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

Last updated

Was this helpful?