Coroutines/Coroutine Basics

[Coroutine 부록] 1. Kotlin main 함수를 Coroutine을 사용하기 위한 suspend fun으로 만들기

반응형

프로세스의 시작점 main 함수

 main 함수란 모든 프로세스의 시작점이다. 보통의 프로그램은 main함수에서 시작해서 main함수가 끝나면 종료된다. main함수를 실행하는 스레드가 Main Thread이며, main함수는 마지막줄이 실행되면 종료된다. 안드로이드와 같은 프레임웍은 이러한 main함수를 프레임웍 단에서 제어하기 때문에 직접 제어할 기회가 없지만, 이는 프로그래밍에 매우 중요한 포인트이기 때문에 알고 있어야 한다.

 

그림1. main함수

 예를 들어 위와 같은 코드를 실행하면 다음과 같은 결과가 나온다.

main 함수 입니다.

Process finished with exit code 0

 

 자 이제 그림2와 같은 코드를 실행해보자. 그림2에서는 Main Thread가 아닌 IO Thread에 println을 하도록 만들었다.

그림2. main함수 내의 코루틴 블록

 이에 대한 결과는 어떻게 나올까?

 만약 "main함수 입니다"만 나올 것으로 예상했다면, 이 글을 읽을 필요가 없다. 다른 글을 읽자.

 만약 "main 함수 입니다. main 함수 내의 코루틴 블록."이 나올 것으로 예상했다면 마저 읽도록 하자. 

그림3. 코루틴 블록 내의 결과

 <그림2>의 코드의 결과는 <그림3>이다. 이유는 IO Thread에서 작업이 수행되기 전에 Main Thread가 종료되어 프로세스가 종료되기 때문이다. 프로세스가 종료되면 프로세스에 속한 모든 스레드가 강제 종료된다. 즉, IO Thread도 실행되기 전에 종료된다.

 

 우리는 여기서 main함수를 일시 중단 함수로 만드는 방식으로 실습 환경을 만들고자 한다. 물론 이렇게 쓰는 경우는 없지만 간편하게 해결하기 위해 다음과 suspend fun으로 바꾼 후 마지막에 delay를 넣어준다.

그림4. main fun를 suspend fun로 만들기

 main 함수는 그 자체로 프로세스가 되기 때문에 suspend 왼쪽의 초록색 실행 버튼(▶)을 눌러 실행할 수 있다.(Intellij 기준)

 

 자 이제 버튼을 눌러 main함수를 실행해보자. <그림5>와 같이 출력된다. 100 밀리초 내에 IO 스레드에서의 작업이 완료되었기 때문에 IO Thread에서 수행된 작업이 수행된다.

그림5. 그림4 코드 실행 결과

 

반응형