Generator

ECMA6 μ—μ„œ λ„μž…λœ ν•¨μˆ˜λ‘œμ¨ μ΄ν„°λŸ¬λΈ”μ„ μƒμ„±ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€.

μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λ₯Ό μ‚¬μš”ν•˜λ©΄ μ΄ν„°λ ˆμ΄μ…˜ ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜μ—¬ μ΄ν„°λŸ¬λΈ”μ„ μƒμ„±ν•˜λŠ” 방식보닀 κ°„νŽΈν•˜κ²Œ μ΄ν„°λŸ¬λΈ”μ„ κ΅¬ν˜„ ν•  수 μžˆλ‹€.

일반적인 ν•¨μˆ˜μ˜ μ‹€ν–‰ κ΅¬μ‘°μ™€λŠ” λ‹€λ₯΄κ²Œ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λŸ­μ„ ν•œκΊΌλ²ˆμ— μ‹€ν–‰ν•˜μ§€ μ•Šκ³  μΌμ‹œ 쀑지 ν–ˆλ‹€κ°€ ν•„μš”ν•œ μ‹œμ μ— μž¬μ‹œμž‘ ν•  수 μž‡λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

ν•¨μˆ˜μ˜ μ •μ˜

μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λŠ” function* ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œλ‹€. λ˜ν•œ ν•˜λ‚˜μ΄μƒμ˜ yield 문을 ν¬ν•¨ν•œλ‹€.

// μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜ μ„ μ–Έλ¬Έ
function* genDec() {
  yield 1;
}

// μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜ ν‘œν˜„μ‹
const genExp = function* () {
  yield 1;
};

// μ œλ„€λ ˆμ΄ν„° λ©”μ„œλ“œ
const obj = {
  * genObjMethod() {
    yield 1;
  }
}

// μ œλ„€λ ˆμ΄ν„° 클래슀 λ©”μ„œλ“œ
const MyClass {
  * genClazzMethod() {
    yield 1;
  }
}

Iterator Interface λ₯Ό κ΅¬ν˜„ν•œ ν™•μž₯ν˜• ν•¨μˆ˜










Β 


function* foo() {
  yield '첫번째 호좜';
  yield 'λ‘λ²ˆμ§Έ 호좜';
  yield 'μ„Έλ²ˆμ§Έ 호좜';
  yield 'λ„€λ²ˆμ§Έ 호좜';
}

var _foo = foo();
for (var i = 0; i < 10; ++i) {
  console.log(_foo.next());
}

λ„€λ²ˆμ§Έ κΉŒμ§€λ§Œ 정상 λ‘œκ·Έκ°€ 찍히며 μ΄ν›„λ‘œλŠ” { value: undefined, done: true } 둜 λ‚˜μ˜¨λ‹€.

Β 
Β 
Β 
Β 







// Object { value: '첫번째 호좜', done: false }
// Object { value: 'λ‘λ²ˆμ§Έ 호좜', done: false }
// Object { value: 'μ„Έλ²ˆμ§Έ 호좜', done: false }
// Object { value: 'λ„€λ²ˆμ§Έ 호좜', done: false }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }
// Object { value: undefined, done: true }

yield

μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜λ₯Ό 쀑지 μ‹œν‚€κ±°λ‚˜ μž¬κ°œν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€.

Syntax

[rv] = yield [expression];

Parameters

  • rv
    • μ œλ„ˆλ ˆμ΄ν„° 싀행을 재개 ν•˜κΈ° μœ„ν•΄μ„œ, optional value을 μ œλ„ˆλ ˆμ΄ν„°μ˜ next() λ©”μ„œλ“œλ‘œ μ „λ‹¬ν•˜μ—¬ λ°˜ν™˜
  • expression
    • μ œλ„ˆλ ˆμ΄ν„° ν•¨μˆ˜μ—μ„œ μ œλ„ˆλ ˆμ΄ν„° ν”„λ‘œν† μ½œμ„ 톡해 λ°˜ν™˜κ°’μ„ μ •μ˜ ν•œλ‹€. (κΈ°λ³Έκ°’ : undefined)