1. [전산, 프로그래밍] 제너레이터 (Generator)
ㅇ 생성 후에, 호출시 마다, 빌 때까지 하나씩 뽑아 사용하는 함수
ㅇ 특징
- 쉽게, 최소한의 자원 소모로, 규칙적인 발생 구조를 갖음
. 그러나, 결과를 무한히 내놓는 구조로는 구현할 수 없음
. 다만, 어느 정도 상한을 두더라도, 이를 저장할 최소의 메모리 소요는 필요함
- 제너레이터 함수는, 제어권을 자신이 독점하지 않고, 함수 호출자에게 양도(yield) 가능
. 제너레이터 함수 및 함수 호출자가 양방향으로 함수의 상태를 주고받을 수 있음
- 제너레이터 함수를 호출하면, 제너레이터 객체를 반환 함
. 이때, 제너레이터 객체는 이터레이터 객체의 한 종류 임
. 따라서, 이터레이터 객체 처럼, next에 의해 반복 처리를 단계별 정밀 제어 가능
ㅇ 주요 용도
- 메모리 공간 절약
. 수많은 반복처리 결과 값을 생성하는 경우, 생성 구조를 갖으므로,
. 입력 길이에 상관 없이 메모리 공간 크기를 동일하게 작게 유지할 수 있음
- 간결한 코드 작성
2. [자바스크립트]
ㅇ 자바스크립트 형식
- function* 함수명() { ...} 으로 정의하고, 1 이상의 yield 표현식을 포함
ㅇ (설명)
- 함수 내부에서, yield 명령으로 값을 반환하게 됨
. 만일, 함수 중간에 yield 구문을 만나면,
.. 그때까지의 중간 값을 반환하고, 함수를 종료 않고, 맨끝에 도달할 때까지 실행됨
. 만일, yield 명령문이 여럿일 때는, 다음 호출시에 이전 yield 명령문 이후부터 재개
- 한편, return 구문을 만나면, 통상의 함수 처럼,
. 값을 반환하고 바로 함수를 종료시킴
ㅇ (참고)
- 화살표 함수로써 정의 불가
- new 연산자 형식에 의한 생성자 함수로는 호출 불가
3. [파이썬]
ㅇ 제너레이터 객체의 생성 방법 둘
- 제너레이터 함수에 의한 생성
. yield가 하나라도 있으면, 제너레이터 함수가 됨
. 제너레이터 객체가 만들어져 반환이 됨
- 제너레이터 표현식에 의한 생성
. () 소괄호 안에, ( for in )
.. 문법적 구성이 리스트 컴프리헨션과 동일함