Skip to content

Latest commit

 

History

History
86 lines (70 loc) · 2.26 KB

generatorFunction.md

File metadata and controls

86 lines (70 loc) · 2.26 KB

generator Function

이 문법의 핵심 기능은 함수를 작성할 때 함수를 특정 구간에 멈춰 놓을 수도 있고, 원할 때 다시 돌아오게 할 수도 있다는 것입니다.

아래와 같은 함수가 있다고 하면

function weirdFunction() {
    return 1;
    return 2;
    return 3;
    return 4;
    return 5;
}

하나의 함수에서 값을 여러 개 반환하는 것은 불가능하므로 이 코드는 제대로 작동하지 않습니다.
정확히는 호출할 때마다 맨 위에 있는 값인 1이 반환됩니다.

하지만 제너레이터 함수를 사용하면 값을 순차적으로 반환할 수 있습니다.

아래와 같은 함수가 있다고 하면

function* generatorFunction() {
    console.log('hi');
    yield 1;
    console.log('captain');
    yield 2;
    console.log('Teemo');
    yield 3;
    return 4;
};

제너레이터 함수를 만들 때는 function* 키워드를 사용합니다.

함수를 작성한 뒤에는 다음 코드를 사용해 제너레이터를 생성합니다.

const generator = generatorFunction();

제너레이터가 처음 만들어지면 함수의 흐름은 멈춰 있는 상태입니다.
next()가 호출되면 다음 yield가 있는 곳까지 호출하고 다시 멈춥니다.

generator.next();
// hi
// {value: 1, done: false}
generator.next();
// captain
// {value: 2, done: false}
generator.next();
// Teemo
// {value: 3, done: false}
generator.next();
// {value: 4, done: true}
generator.next();
// {value: undefined, done: true}

제너레이터 함수를 사용하면 함수를 도중에 멈출 수도 있고, 순차적으로 여러 값을 반환시킬 수도 있습니다.
next() 함수에 파라미터를 넣으면 제너레이터 함수에서 yield를 사용하여 해당 값을 조회할 수도 있습니다.

아래와 같은 코드가 있다면

function* sumGenerator() {
    console.log('sumGenerator가 만들어졌습니다.');
    let a = yield;
    let b = yield;
    yield a + b;
}

const sum= sumGenerator();
sum.next();
// sumGenerator가 만들어졌습니다.
// {value: undefined, done: false}
sum.next(1);
// {value: undefined, done: false}
sum.next(2);
// {value: 3, done: true}
sum.next();
// {value: undefined, done: true}