코루틴에 대해 이해하기 위해, 서브루틴과의 비교를 해 줄 필요가 있다.
서브루틴 : 반복되는 기능을 모아 별도로 묶어 메모리에 저장한 것
서브루틴의 구현체 : 함수/메소드
서브루틴의 동작 : 호출에 의해 진입 -> 리턴에 의해 반환
동일점 : 기능을 별도의 메모리에 저장한 것
다른 점 :
- 진입 -> 반환을 반복하여 가능하며, 반환 전 상태를 기억함
- 반환이 되고 나서는 일시정지가 가능
- 메인루틴에 종속되지 않고 대등한 관계이다
일시정지가 자유로우므로, 협력형 멀티테스킹을 위해 사용될 수 있다
공통점 : 함수 내에 yield 키워드를 포함하여 구현된다
차이점 :
Generator : yield를 반환의 목적으로만 사용
Coroutine : yield를 입력과 반환의 목적으로 사용
구현
- while True : 안에 yield를 포함한 코루틴을 선언한다
동작
- 해당 코루틴을 변수에 할당한다
- 반환 : next(코루틴 변수) 를 통해 코루틴 결과값을 반환받는다.
next(코루틴 변수)는 한번 호출될 때매다 코루틴의 다음 yield까지 호출한 후 대기한다. - 진입 : 코루틴변수.send(값) 을 통해 진입한다. send는