코루틴은 초보자에게 어려운 구조이므로 생략해도 됩니다.
함수와 코루틴의 차이점부터 다시 살펴봅니다. 본문에도 설명이 되어 있지만, 함수는 일방적으로 주고 받는 관계입니다.
main -> add 호출 -> main
으로 끝나는 관계입니다.
코루틴은 main과 함수가 협력적인 관계입니다. 함수와 구별하기 위해 코루틴이라고 부릅니다.
main -> 함수 -> main -> 함수 -> main
과 같은 관계가 가능합니다. 여기서 함수는 종료되지 않으니까 함수 내부의 값이 '유지'됩니다.
코루틴은 함수와 다르기 때문에 일종의 셋업 과정이 필요합니다.
next(co)는 코루틴을 셋업하는 과정입니다. co.__next__()로 직접 호출해도 되지만, 보통은 next(co)처럼 코루틴을 셋업하는 것이 일반적입니다.
셋업 과정에서는 yield까지만 실행하고 제어를 메인에 돌려준다고 되어 있습니다. 파이썬 언어 설계자의 설계이고, 우리는 이를 학습하는 것이죠.
마치 dog은 왜 뜻이 '개'이고, '도그'라고 읽나요? 라는 질문을 하는 것과 같은데, 이는 의미 없는 질문이죠. dog는 개이고, 도그라고 읽기로 약속되어 있다면 약속을 학습할 뿐입니다. next(co)는 코루틴을 셋업하고, yield까지만 실행하고 제어권을 돌려준다고 약속되어 있을 뿐입니다.
코루틴에서는 (yield)로 표기합니다. 이는 코루틴에서 입력값처럼 동작합니다.
첫 번째 코루틴 호출은 첫 번째 (yield)까지 호출하고 대기합니다.
두 번째 코루틴 호출은 첫 번째 (yield) 다음의 나머지 부분을 실행하고, 다시 처음으로 돌아가서 그 다음 (yield)까지 호출하고 대기합니다.