Home JS[Generator]
Post
Cancel

JS[Generator]

πŸ“Œ Generator

ES6μ—μ„œ λ„μž…λœ μ œλ„ˆλ ˆμ΄ν„°(Generator) ν•¨μˆ˜λŠ” μ΄ν„°λŸ¬λΈ”μ„ μƒμ„±ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ΄ν„°λ ˆμ΄μ…˜ ν”„λ‘œν† μ½œμ„

μ€€μˆ˜ν•΄ μ΄ν„°λŸ¬λΈ”μ„ μƒμ„±ν•˜λŠ” 방식보닀 κ°„νŽΈν•˜κ²Œ μ΄ν„°λŸ¬λΈ”μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€. λ˜ν•œ μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” 비동기 μ²˜λ¦¬μ— μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€.

μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” 일반 ν•¨μˆ˜μ™€λŠ” λ‹€λ₯Έ λ…νŠΉν•œ λ™μž‘μ„ ν•œλ‹€. μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” 일반 ν•¨μˆ˜μ™€ 같이 ν•¨μˆ˜μ˜ μ½”λ“œ 블둝을 ν•œ λ²ˆμ—

μ‹€ν–‰ν•˜μ§€ μ•Šκ³  ν•¨μˆ˜ μ½”λ“œ λΈ”λ‘μ˜ 싀행을 μΌμ‹œ μ€‘μ§€ν–ˆλ‹€κ°€ ν•„μš”ν•œ μ‹œμ μ— μž¬μ‹œμž‘ν•  수 μžˆλŠ” νŠΉμˆ˜ν•œ ν•¨μˆ˜μ΄λ‹€.

일반 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ return 문으둜 λ°˜ν™˜κ°’μ„ λ¦¬ν„΄ν•˜μ§€λ§Œ μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ μ œλ„ˆλ ˆμ΄ν„°λ₯Ό λ°˜ν™˜ν•œλ‹€.

1
2
3
4
5
6
7
8
9
function* generateSequence() {
  yield 1;
  yield 2;
  return 3;
}

// 'μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜'λŠ” 'μ œλ„ˆλ ˆμ΄ν„° 객체'λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
let generator = generateSequence();
alert(generator); // [object Generator]

next() 둜 μ œλ„€λ ˆμ΄ν„° μ‹€ν–‰ κ°€λŠ₯

1
2
3
4
5
6
7
8
9
10
11
let one = generator.next();

alert(JSON.stringify(one)); // {value: 1, done: false}

let two = generator.next();

alert(JSON.stringify(two)); // {value: 2, done: false}

let three = generator.next();

alert(JSON.stringify(three)); // {value: 3, done: true}

μ œλ„ˆλ ˆμ΄ν„°λŠ” μ΄ν„°λŸ¬λΈ”(iterable)μ΄λ©΄μ„œ λ™μ‹œμ— μ΄ν„°λ ˆμ΄ν„°(iterator)인 객체이닀.

iterator λ©”μ†Œλ“œλ₯Ό μ†Œμœ ν•œ μ΄ν„°λŸ¬λΈ”μ΄λ‹€. 그리고 μ œλ„ˆλ ˆμ΄ν„°λŠ” next λ©”μ†Œλ“œλ₯Ό μ†Œμœ ν•˜λ©° next λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ value, done

ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ” μ΄ν„°λ ˆμ΄ν„° 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” μ΄ν„°λ ˆμ΄ν„°μ΄λ‹€.

for λ‘œλ„ 싀행됨

1
2
3
4
5
6
7
8
9
10
11
function* generateSequence() {
  yield 1;
  yield 2;
  return 3;
}

let generator = generateSequence();

for (let value of generator) {
  alert(value); // 1, 2κ°€ 좜λ ₯됨
}

μ£Όμ˜ν•  점은 μœ„ μ˜ˆμ‹œλ₯Ό μ‹€ν–‰ν•˜λ©΄ 1κ³Ό 2만 좜λ ₯되고 3은 좜λ ₯λ˜μ§€ μ•ŠμŒ

μ΄μœ λŠ” for..of μ΄ν„°λ ˆμ΄μ…˜μ΄ done: true일 λ•Œ λ§ˆμ§€λ§‰ valueλ₯Ό λ¬΄μ‹œν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μ œλ„ˆλ ˆμ΄ν„°λŠ” μ΄ν„°λŸ¬λΈ” κ°μ²΄μ΄λ―€λ‘œ μ œλ„ˆλ ˆμ΄ν„°μ—λ„ μ „κ°œ 문법(…) 같은 κ΄€λ ¨ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€.

1
2
3
4
5
6
7
8
9
function* generateSequence() {
  yield 1;
  yield 2;
  yield 3;
}

let sequence = [0, ...generateSequence()];

alert(sequence); // 0, 1, 2, 3
This post is licensed under CC BY 4.0 by the author.