js yeild에 대해 알려줘

Benjamin·2025년 1월 4일
0

chatGPT:
JavaScript의 yield는 제너레이터 함수(generator function) 내에서 사용되는 키워드로, 함수의 실행을 일시 중단하고 중간 결과를 반환한 뒤, 이후 다시 호출되면 중단했던 지점부터 실행을 재개하는 데 사용됩니다. 제너레이터는 ES6(ECMAScript 2015)에서 도입된 기능입니다.

기본 문법

function* generatorFunction() {
  yield value;
}
  • function* 키워드는 제너레이터 함수를 정의합니다.
  • yield 키워드는 값을 반환하고 실행을 멈춥니다.

제너레이터 함수의 특징

  1. 반환값: 제너레이터 함수는 호출 시 제너레이터 객체를 반환합니다.
  2. next() 메서드: 제너레이터 객체에서 next() 메서드를 호출하여 함수를 단계적으로 실행할 수 있습니다.
  3. done 속성: next() 호출 시 반환된 객체는 { value, done } 형태이며,
    • value: yield에서 반환된 값.
    • done: 제너레이터 함수 실행이 끝났는지 여부.

예제 1: 간단한 제너레이터

function* simpleGenerator() {
  yield 1;
  yield 2;
  yield 3;
}

const gen = simpleGenerator();

console.log(gen.next()); // { value: 1, done: false }
console.log(gen.next()); // { value: 2, done: false }
console.log(gen.next()); // { value: 3, done: false }
console.log(gen.next()); // { value: undefined, done: true }

예제 2: yield와 루프

function* countUpTo(limit) {
  for (let i = 1; i <= limit; i++) {
    yield i;
  }
}

const counter = countUpTo(5);

console.log(counter.next().value); // 1
console.log(counter.next().value); // 2
console.log(counter.next().value); // 3
console.log(counter.next().value); // 4
console.log(counter.next().value); // 5
console.log(counter.next().value); // undefined

예제 3: 동적 값 전달 (next()에 값 전달)

yield 표현식은 next() 메서드에서 전달된 값을 받을 수도 있습니다.

function* dynamicGenerator() {
  const x = yield "Enter a value:";
  console.log(`Received: ${x}`);
  const y = yield "Enter another value:";
  console.log(`Received: ${y}`);
  return x + y;
}

const gen = dynamicGenerator();

console.log(gen.next()); // { value: 'Enter a value:', done: false }
console.log(gen.next(10)); // { value: 'Enter another value:', done: false }, logs 'Received: 10'
console.log(gen.next(20)); // { value: undefined, done: true }, logs 'Received: 20'

제너레이터의 활용

  1. 이터러블 객체 생성: for...of 루프와 함께 사용.
  2. 비동기 흐름 제어: 예전에는 yield가 비동기 흐름을 관리하기 위해 사용되었으나, 현재는 주로 async/await이 선호됩니다.
  3. 데이터 스트리밍: 대용량 데이터를 한 번에 처리하지 않고, yield로 데이터를 점진적으로 생성.

참고

  • 제너레이터와 yield는 반복 처리, 상태 저장, 혹은 비동기 처리 등에서 매우 유용하게 활용됩니다.
  • 최신 문법인 async function*과 await을 결합하여 비동기 제너레이터를 만들 수도 있습니다.
profile
개발자 되기 프로젝트!

0개의 댓글