
iterator란 값 생성기iterator란 next()를 호출할 때 다음 값을 생성해내는 상태를 가진 헬퍼 객체즉, 값을 요청할 때마다 내부 상태를 일정하게 유지하고 있기 때문에 다음값(next)를 계산하는 방법을 알고 있다.

iterator는 next()를 호출할 때마다 두가지의 작업을 수행한다.
generator란 iterator를 만드는 도구return 대신 yield로 반환next() 메서드가 호출되면 중단된 지점부터 다시 시작(모든 데이터값과 '마지막' 실행 명령문을 기억)즉, retrun을 사용하면 내부 지역변수가 사라지지만, yield를 사용하면 내부값이 보존

- iterable(가장 큰 클래스)
- iterator(iterable의 하위 클래스)
- generator(iterator의 하위 클래스)
ichi.pro 블로그, mingrammer's note
Generator를 Coroutine이라고 한다stackless와 stackful로 나뉜다.❓ Coroutine - Stackful Functions
❓ Generators - Stackless Functions
❗❗
send()라는 메소드를 사용하며__next()__라는 메소드와 동일하게 인자값을 받으며yield로 평가된다.
yield 구문까지는 일단 진행해서 멈춘 상태여야 send()를 호출할 수 있기 때문에 생성 즉시 next()를 한 번 호출해야 한다Witeframe 블로그, Crucian Carp 블로그
클래스는 최소 2개(
__init__(),send())의 메소드를 정의해야한다. 하지만 코루틴은 하나의 함수만 정의한다. 🤔
따라서 다음과 같은 경우 코루틴이 유리하다.
Wireframe 블로그, Jooyung Han 블로그
❗ Synchronous Programming : 동시에 일어나는 프로그래밍
❗ Asynchronous Programming : 동시에 일어나지 않는 프로그래밍
async coroutine💘
async coroutine은 주로 IO(input/output)가 많은 작업에 있어서 CPU가 노는 시간동안 ‘다른 일’을 하도록 해서 전체적인 수행 시간을 줄이고 성능을 끌어올려 비병목자원을 줄이고자 함에 출현함.

런루프를 통해서 대기하고 있는 작업 중 하나가 실행기회를 얻도록 한다.
디스크에 있는 파일을 액세스하거나 네트워크 소켓을 액세스하는 시간동안 다른 작업을 처리해서 마치 동시에 여러 작업을 처리하는 것 같은 효과를 낸다.