[ES6+] πŸ“ μ΄ν„°λŸ¬λΈ” / μ΄ν„°λ ˆμ΄ν„°

Mec.D's BlogΒ·2022λ…„ 5μ›” 15일
0

JS ES6+ 비곡식 λ…ΈνŠΈ

λͺ©λ‘ 보기
1/17
post-thumbnail

πŸ”„ μ΄ν„°λŸ¬λΈ” / μ΄ν„°λ ˆμ΄ν„°

μ£Όμš” κ°œλ…λ“€

πŸ’‘ μ΄ν„°λŸ¬λΈ” (Iterable)

μ΄ν„°λ ˆμ΄ν„°λ₯Ό 가진 κ°μ²΄μž…λ‹ˆλ‹€.

μ΄ν„°λŸ¬λΈ”μ—λŠ” λ¬Έμžμ—΄, Array, Set, Map 등이 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’‘ μ΄ν„°λ ˆμ΄ν„° (Iterator)

{ value, done }을 λ°˜ν™˜ν•˜λŠ” next()λΌλŠ” μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό 가진 κ°μ²΄μž…λ‹ˆλ‹€.

const μ΄ν„°λ ˆμ΄ν„° = μ΄ν„°λŸ¬λΈ”[Symbol.iterator]();
const { value, done } = μ΄ν„°λ ˆμ΄ν„°.next();

λ₯Ό λ§Œμ‘±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

νŠΉμ§•

  1. 순회 μ€‘μ—λŠ” done: false λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  2. μˆœνšŒκ°€ λλ‚˜λ©΄ done: true λ₯Ό λ°˜ν™˜ν•΄ μ•Œλ €μ€λ‹ˆλ‹€.

πŸ’‘ Well-Formed μ΄ν„°λ ˆμ΄ν„° (Iterator)

μ΄ν„°λŸ¬λΈ”μ²˜λŸΌ for ... of에 λ„£κ³  돌릴 수 μžˆλŠ” μ΄ν„°λ ˆμ΄ν„°μž…λ‹ˆλ‹€.

μ΄ν„°λŸ¬λΈ”κ³Ό λΉ„μŠ·ν•˜κ²Œ μ΄ν„°λ ˆμ΄ν„°[Symbol.iterator]()λ₯Ό ν•˜λ©΄ μžκΈ°μžμ‹ μ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

const μ΄ν„°λ ˆμ΄ν„° = μ΄ν„°λŸ¬λΈ”[Symbol.iterator]();
const μžκΈ°μžμ‹  = μ΄ν„°λ ˆμ΄ν„°[Symbol.iterator]();

console.log(μ΄ν„°λ ˆμ΄ν„° === μžκΈ°μžμ‹ ); // true 좜λ ₯

❓ μƒˆ μ΄ν„°λ ˆμ΄ν„°κ°€ μ•„λ‹Œ 기쑴의 μ΄ν„°λ ˆμ΄ν„°λ₯Ό λ‹€μ‹œ λ‚΄λ±‰λŠ” μ΄μœ λŠ”?

πŸ‘‰ μ²˜μŒλΆ€ν„° λ‹€μ‹œ μˆœνšŒν•˜λŠ” μ΄ν„°λŸ¬λΈ”κ³ΌλŠ” 달리 μ΄ν„°λ ˆμ΄ν„°λ₯Ό 돌릴 경우 λ‚˜λ¨Έμ§€ λΆ€λΆ„λ§Œ μˆœνšŒν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€!

const μ΄ν„°λŸ¬λΈ” = [1, 2, 3];
const μ΄ν„°λ ˆμ΄ν„° = μ΄ν„°λŸ¬λΈ”[Symbol.iterator]();

console.log(μ΄ν„°λ ˆμ΄ν„°.next()); // { value: 1, done: false } 좜λ ₯

// μΌ€μ΄μŠ€ A: μ΄ν„°λŸ¬λΈ”λ‘œ 순회
for (const item of μ΄ν„°λŸ¬λΈ”) console.log(item); // 1 2 3 좜λ ₯

// μΌ€μ΄μŠ€ B: μ΄ν„°λ ˆμ΄ν„°λ‘œ 순회
for (const item of μ΄ν„°λ ˆμ΄ν„°) console.log(item); // 2 3 좜λ ₯



πŸ“Œ 정리

μ΄ν„°λŸ¬λΈ” / μ΄ν„°λ ˆμ΄ν„° ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λ©΄

ES6+의 for ... of / ... μ—°μ‚°μž / μ œλ„€λ ˆμ΄ν„° 등을 μ΄μš©ν•  수 μžˆμ–΄ νŽΈλ¦¬ν•©λ‹ˆλ‹€.

profile
기술둜 삢을 λ””μžμΈν•˜λŠ” 개발자 Mec.D μž…λ‹ˆλ‹€

0개의 λŒ“κΈ€