๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ‘‍๐Ÿ—จFRONT-END/๐Ÿงฉ JavaScript

์ดํ„ฐ๋Ÿฌ๋ธ”/์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ

by ๋…น์ฐจ๋ง›๊ฐœ๊ตฌ๋ฆฌ 2022. 12. 15.

์ดํ„ฐ๋ ˆ์ด์…˜ ํ”„๋กœํ† ์ฝœ

ES6์—์„œ ๋„์ž…๋œ ์ดํ„ฐ๋ ˆ์ด์…˜ ํ”„๋กœํ† ์ฝœ(iteration protocol)์€ ๋ฐ์ดํ„ฐ ์ปฌ๋ ‰์…˜์„ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•œ

ํ”„๋กœํ† ์ฝœ(๋ฏธ๋ฆฌ ์•ฝ์†๋œ ๊ทœ์น™) ์ด๋‹ค. ์ด๊ฒƒ์€ JS ์ž์ฒด์˜ ๋…์ž์ ์ธ ํŠน์ง•์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์—ฌ๋Ÿฌ ์–ธ์–ด์—์„œ ๋ฐ˜๋ณต ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ฐ€๊น๋‹ค. 

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋ฉด, ์–ด๋–ค ๊ตฌ์กฐ/๊ฐ์ฒด์˜ ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋ณต ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด for..of๋ฌธ๊ณผ spread operator์ธ๋ฐ, ์ด ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ „์ œ๊ฐ€ ๋ฐ”๋กœ Iteration Protocol์ด๋‹ค.

yield*์™€ destructuring assignment ๋˜ํ•œ ์ด ๊ทœ์น™์— ์˜์กดํ•˜๋Š” ๊ตฌ๋ฌธ, ํ‘œํ˜„์‹์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

์ดํ„ฐ๋ ˆ์ด์…˜ ํ”„๋กœํ† ์ฝœ์—๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ํ”„๋กœํ† ์ฝœ(iterable protocol)๊ณผ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ(iterator protocol)์ด ์žˆ๋‹ค.

 

์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ธ‰ํ•˜๋Š” ์ชฝ(Data provider, [array, string, map/set, DOM data Structure..])๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ์ชฝ(Data consumerm, [for...of, spread, ... ])์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ณด์ž.

 

์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ฒ˜๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ˆœํšŒ ๋ฐฉ์‹์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ์†Œ๋น„์ž๋Š” ๊ทธ ๋ฐฉ์‹์— ์ผ์ผ์ด ๋Œ€์‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด๋Š” ํšจ์œจ์ ์ธ ๋ฐฉ์‹์ด ์•„๋‹ˆ๊ธฐ์— ํ•˜๋‚˜์˜ ํ†ต์ผ๋œ ๊ทœ์น™์„ ๋งŒ๋“ค์–ด ๋‘ ์ฃผ์ฒด๊ฐ€ ์ด๊ฒƒ์—๋งŒ ์˜์กดํ•˜๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๊ฒฐ๊ตญ, ์ด ๊ณผ์ •์—์„œ ๋‚˜์˜ค๊ฒŒ ๋œ ๊ฒƒ์ด Iteration Protocol์ด๋ฉฐ, ์ด๊ฒƒ์€ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž์™€ ์†Œ๋น„์ž ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค(๋งค๊ฐœ์ฒด)์ธ ์…ˆ์ด๋‹ค.

์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์†Œ๋น„์ž๋Š” ๋‚ด๋ถ€์—์„œ Symbol.iterator ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดํ„ฐ๋ ˆ๋ฆฌํ„ฐ์˜ next ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ˆœํšŒํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  next ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ฆฌ์ ˆํŠธ ๊ฐ์ฒด์˜ value ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ทจ๋“ํ•œ๋‹ค.

JS์˜ Iteration Protocol์„ ์ด๋ฃจ๋Š” ํ•˜์œ„ ๊ทœ์น™์€ Iterable Protocol๊ณผ Iterator Protocol์ด ์žˆ๋‹ค. ์ง€๊ธˆ๋ถ€ํ„ฐ ๊ฐ Protocol์˜ ํŠน์ง•์„ ํ•จ๊ป˜ ์•Œ์•„๋ณด์ž.

 


์ดํ„ฐ๋Ÿฌ๋ธ”

์ดํ„ฐ๋Ÿฌ๋ธ”์˜ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด์˜ ๋ฐ˜๋ณต์ ์ธ ๋™์ž‘์— ๋Œ€ํ•œ ์ •์˜์ด๋‹ค. ์–ด๋–ค ๊ฐ์ฒด์— ์•„๋ž˜์˜ 2๊ฐ€์ง€ ์‚ฌํ•ญ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ์ฒด๋Š” iterable์ด๋‹ค.

  1. ๊ฐ์ฒด๋Š” Symbol.iterator๋ผ๋Š” key๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. Symbol.iterator์˜ value๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค.

JS ๋‚ด์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์žฅํ˜• ์ดํ„ฐ๋Ÿฌ๋ธ”๊ฐ์ฒด ํƒ€์ž…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ด๋“ค์€ ์šฐ๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์ง€ ์•Š์•˜์ง€๋งŒ

Symbol.iterator ๋ฉ”์†Œ๋“œ๋ฅผ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋‹ค.

  • String
  • Array
  • Typed Array
  • Map
  • Set
  • DOM data structure
  • Arguments

์œ„์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ํ‰์†Œ์— string ํƒ€์ž…์„ ๋ณ€ํ™˜๊ณผ์ •์—†์ด ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

const string = "imstring"

for ( const i of string) {
	console.log(i);
}

//
i
m
s
t
r
i
n
g

 

๋˜ํ•œ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” Symbol.iterator ๋ฉ”์†Œ๋“œ๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—.

์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ” ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•œ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด ์•„๋‹ˆ๋ฉฐ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœํšŒํ•  ์ˆ˜ ์—†๋‹ค.

const obj = { a: 1, b: 2 };

console.log(Symbol.iterator in obj); // false

// ์ดํ„ฐ๋Ÿฌ๋ธ”์ด ์•„๋‹Œ ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” for...of ๋ฌธ์—์„œ ์ˆœํšŒํ•  ์ˆ˜ ์—†๋‹ค.
// TypeError: obj is not iterable
for (const p of obj) {
  console.log(p);
}

ํ•˜์ง€๋งŒ, ์ด ๊ทœ์น™์€ ์‚ฌ์šฉ์ž ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋‚ด์žฅ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ์–ด๋Š ๊ฐ์ฒด์—์„œ๋“  ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ์— ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

(๐Ÿธ : Symbol.iterator ๋ผ๋Š” key๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ ๋‚˜์˜ค๋Š” ๊ฐ’์ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ ์ธ๋ฐ ์ € ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ์ฒด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”ํ•˜๋‹ค!!.)

์•ž์„œ ๋ฐฐ์—ด๊ณผ JS ๋‚ด์žฅํ˜• ์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด ํƒ€์ž…์— ์†ํ•œ  Symbol.iterator๋ผ๋Š” ์ผ์ข…์˜ Key๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ ,
์ด Key๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ํ•จ์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ์ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ ๋‚˜์˜ค๋Š” ๊ฐ’์ด ๋ฐ”๋กœ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.๊ทธ๋ž˜์„œ ๋ฐฐ์—ด์€ ์ดํ„ฐ๋Ÿฌ๋ธ”ํ•˜๋‹ค๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ์ด๋Ÿฌํ„ฐ๋ธ” : ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” [Symbol.iterator]()๋ฅผ ๊ฐ€์ง„ ๊ฐ’

 


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

Iterator Protocol์€ ๊ฐ’์˜ ์ˆœ์„œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •์˜์ด๋‹ค. iterable๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–ด๋–ค ๊ฐ์ฒด์— ์•„๋ž˜์˜ 2๊ฐ€์ง€ ์‚ฌํ•ญ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๋ฉด ๊ทธ ๊ฐ์ฒด๋Š” iterator์ด๋‹ค.

  1. ๊ฐ์ฒด๋Š” .next() ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. .next() ์‹คํ–‰์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ key๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด์—ฌ์•ผ ํ•œ๋‹ค.
    • value - ๋ฐ˜๋ณต๋ฌธ ์•ˆ์˜ ๋‹จ์ผ ๊ฐ’์ด๋ฉฐ ์–ด๋– ํ•œ ํƒ€์ž…์ด๋“  ์ƒ๊ด€์—†๋‹ค.
    • done - ๋ฐ˜๋ณต๋ฌธ ์ข…๊ฒฐ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ํŒ๋‹จ ๊ฐ’์ด๋ฉฐ Boolean ํƒ€์ž…์ด๋‹ค.

์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์€ next ๋ฉ”์†Œ๋“œ๋ฅผ ์†Œ์œ ํ•˜๋ฉฐ next ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ˆœํšŒํ•˜๋ฉฐ value, done ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ฆฌ์ ˆํŠธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ทœ์•ฝ์„ ์ค€์ˆ˜ํ•œ ๊ฐ์ฒด๊ฐ€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ์ด๋‹ค.

 

์ดํ„ฐ๋Ÿฌ๋ธ” ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•œ ์ดํ„ฐ๋Ÿฌ๋ธ”์€ Symbol.iterator ๋ฉ”์†Œ๋“œ๋ฅผ ์†Œ์œ ํ•œ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ดํ„ฐ๋ ˆ์ดํ„ฐ ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•œ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” next ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ next ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด value, done ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” 

์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ฆฌ์ ˆํŠธ(iterator result) ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ next ๋ฉ”์†Œ๋“œ๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•œ ํฌ์ธํ„ฐ์˜ ์—ญํ• ์„ ํ•˜๋ฉฐ.

next ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•œ ๋‹จ๊ณ„์”ฉ ์ˆœํšŒํ•˜๋ฉฐ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ฆฌ์ ˆํŠธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ next ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ฆฌ์ ˆํŠธ ๊ฐ์ฒด์˜ value ํ”„๋กœํผํ‹ฐ๋Š” ํ˜„์žฌ ์ˆœํšŒ ์ค‘์ธ ์ดํ„ฐ๋Ÿฌ๋ธ”์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  done ํ”„๋กœํผํ‹ฐ๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์˜ ์ˆœํšŒ ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

์ดํ„ฐ๋ ˆ์ดํ„ฐ๋„ ์ดํ„ฐ๋Ÿฌ๋ธ”ํ•˜๋‹ค

์œ„์—์„œ์ฒ˜๋Ÿผ ์ดํ„ฐ๋Ÿฌ๋ธ”ํ•œ ๊ฐ’์—์„œ ๊ฐ€์ ธ์˜จ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ๊ทธ ์ž์ฒด๋กœ๋„ ์ดํ„ฐ๋Ÿฌ๋ธ”ํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ฆ‰, ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด Symbol.iterator๋ฅผ Key๋กœ ํ•˜๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ฆฌํ„ด ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๋ฉฐ.
์ด ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋Š” ์ž๊ธฐ ์ž์‹ ์ด๋‹ค.

const arr = [1, 2, 3];
let arrIter = arr[Symbol.iterator]();

let iter = arrIter[Symbol.iterator](); // ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋„ ์ž๊ธฐ ์ž์‹ ์ธ ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
iter.next(); // { value : 1, done : false }
iter.next(); // { value : 2, done : false }
iter.next(); // { value : 3, done : false }
iter.next(); // { value : undefined, done : true }

 


 

์ดํ„ฐ๋Ÿฌ๋ธ”/์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ์ด์ 

์ดํ„ฐ๋Ÿฌ๋ธ”ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ์›์†Œ๋“ค์„ ์ฐจ๋ก€๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์ดํ„ฐ๋Ÿฌ๋ธ”ํ•œ ๊ธฐ๋ณธ ์ž๋ฃŒ๊ตฌ์กฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ดํ„ฐ๋Ÿฌ๋ธ” ํ”„๋กœํ† ์ฝœ์„ ์ง€ํ‚ค๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด๋“ค์€ for...of๋ฌธ์œผ๋กœ ์ˆœํšŒํ•˜๊ฑฐ๋‚˜ ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์ ์ด ์ƒ๊ธด๋‹ค.

const numbers = [1, 2, 3, 4, 5];

for (const number of numbers) { // ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” for...of ์ˆœํšŒ
  console.log(number);
}

const [a, b, ...rest] = numbers; // ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ „๊ฐœ ์—ฐ์‚ฐ์ž
log(a); // 1
log(b); // 2
log(rest); // [3, 4, 5]

์ดํ„ฐ๋Ÿฌ๋ธ” ํ”„๋กœํ† ์ฝœ์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ๊ทœ์•ฝ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์˜๋„์— ๋”ฐ๋ผ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋‚˜ ๊ฐ์ฒด๋ฅผ ์ดํ„ฐ๋Ÿฌ๋ธ” ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๊ฒŒ ํ•˜์—ฌ ์ˆœํšŒ๊ฐ€๋Šฅํ•จ์„ ๋ช…์‹œํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์ „๊ฐœ ์—ฐ์‚ฐ์ž ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊น”๋”ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

๐Ÿ“š์ถœ์ฒ˜/ ์ฐธ๊ณ 


https://poiemaweb.com/es6-iteration-for-of

https://catsbi.oopy.io/79e5ee3a-7c93-4ed6-a48f-2da6eab42109

https://tecoble.techcourse.co.kr/post/2021-05-24-iteration-protocols/

https://wbluke.tistory.com/34

728x90