[TIL] 제너레이터, yield

oaksusu·2024년 3월 16일
0

TIL

목록 보기
12/41
post-thumbnail

0. 주제 선정하게 된 배경 :

프로그래머스 문제 풀면서 하루정도 고민하게 된 문제가 있었다. (결국 풀지 못함)
단순한 방식이 아니라 내가 원하던 논리방식으로 풀고 싶었는데,
그거에 얽매이다가 문제를 못풀었던것같다.
다른 사람의 풀이 중에 내가 원하던 논리방식으로 푼 방식이 있었고,
그렇게 풀기위해서는 제너레이터랑 yield를 알아야 했다.

1. 제대로 알고 넘어가기 :

1-1. 제너레이터 :

여러 개의 값을 필요에 따라 하나씩 반환(yield)할 수 있음
제너레이터를 만들려면 '제너레이터 함수'라고 불리는 특별한 문법구조가 필요함

1-2. 제너레이터 함수 :

  • 일반 함수에 *이 붙음
  • 함수 내부에는 yield <value>문이 있음 (value는 생략 가능하지만 undefined됨)
function* generateExample() {
	yield 1;
    yield 2;
    return 3;
}
  • 제너레이터 함수를 호출하면 함수가 실행이 되는게 아니라,
    실행을 처리하는 객체인 '제너레이터 객체'가 반환됨
let generator = generateExample();
alert(generator); // [object Generator]

1-3. 제너레이터 객체의 메서드 : next()

next()메서드는 value, done 프로퍼티를 가진 객체를 반환함

  • value : 값
  • done : 함수 실행이 끝나면 true, 아니면 false
let one = generator.next(); // {value: 1, done: false}

next()메서드는 가장 가까운 yield <value>문을 만날 때까지 실행이 지속할 수 있고, 더 이상 yield <value> 문이 없으면 멈춤

=> 아래 코드를 해석해보면, yield 구문이 실행되고 i++까지 실행되고 중단! (아래 적용해보기 링크에 더 자세히...)

function* example () {
  let i = 1;
  while(true) {
  	yield Number(Number(i).toString(2) * 5);
  	i++;
  }
}

2. 적용해보기

프로그래머스 오답노트

3. 참고한 사이트:

https://ko.javascript.info/generators

profile
삐약

0개의 댓글