Unit 43. 코루틴 사용하기

지금까지 함수를 호출한 뒤 함수가 끝나면 현재 코드로 다시 돌아왔습니다. 예를 들어서 다음과 같이 calc 함수 안에서 add 함수를 호출했을 때 add 함수가 끝나면 다시 calc 함수로 돌아옵니다. 특히 add 함수가 끝나면 이 함수에 들어있던 변수와 계산식은 모두 사라집니다.

def add(a, b):
    c = a + b    # add 함수가 끝나면 변수와 계산식은 사라짐
    print(c)
    print('add 함수')
 
def calc():
    add(1, 2)    # add 함수가 끝나면 다시 calc 함수로 돌아옴
    print('calc 함수')
 
calc()

그럼 이 소스 코드에서 calc 함수와 add 함수의 관계를 살펴보겠습니다. calc가 메인 루틴(main routine)이면 addcalc의 서브 루틴(sub routine)입니다. 따라서 메인 루틴과 서브 루틴의 동작 과정을 그림으로 나타내면 다음과 같은 모양이 됩니다.

그림 43-1 메인 루틴과 서브 루틴의 동작 과정
그림 43 1 메인 루틴과 서브 루틴의 동작 과정

메인 루틴에서 서브 루틴을 호출하면 서브 루틴의 코드를 실행한 뒤 다시 메인 루틴으로 돌아옵니다. 특히 서브 루틴이 끝나면 서브 루틴의 내용은 모두 사라집니다. 즉, 서브 루틴은 메인 루틴에 종속된 관계입니다.

하지만 코루틴은 방식이 조금 다릅니다. 코루틴(coroutine)은 cooperative routine를 의미하는데 서로 협력하는 루틴이라는 뜻입니다. 즉, 메인 루틴과 서브 루틴처럼 종속된 관계가 아니라 서로 대등한 관계이며 특정 시점에 상대방의 코드를 실행합니다.

그림 43-2 코루틴의 동작 과정
그림 43 2 코루틴의 동작 과정

이처럼 코루틴은 함수가 종료되지 않은 상태에서 메인 루틴의 코드를 실행한 뒤 다시 돌아와서 코루틴의 코드를 실행합니다. 따라서 코루틴이 종료되지 않았으므로 코루틴의 내용도 계속 유지됩니다.

일반 함수는 호출을 하면 코드를 한 번만 실행할 수 있지만, 코루틴은 코드를 여러 번 실행할 수 있습니다. 참고로 함수의 코드를 실행하는 지점을 진입점(entry point)이라고 하는데 코루틴은 진입점이 여러 개인 함수입니다.

이번 유닛에서 설명할 코루틴은 초보자가 이해하기 어려운 내용입니다. 코루틴을 모르더라도 파이썬으로 프로그래밍하는데는 큰 지장이 없습니다. 이 부분이 어렵게 느껴진다면 그냥 건너뛰어도 됩니다. 나중에 프로그래밍에 익숙해졌을 때 다시 학습하는 것을 권장합니다.