plzy의 개발 블로그

[Coroutine] suspend 를 왜 붙이는 걸까? 본문

Android

[Coroutine] suspend 를 왜 붙이는 걸까?

plzyhappy 2022. 6. 30. 17:45

Coroutine에서 suspend는 빠트릴 수 없는 중요한 키워드이다.

하지만 붙이는 경우가 있고 붙이지 않는 경우도 있다. ex) flow

어떠한 경우에 붙이고 어떤 역할을 하는지 알아보자.

suspend의 뜻

suspend를 구글 번역기를 돌려보면 중지하다 라는 뜻이 보일 것이다.
말 그대로 suspend를 붙인 함수는 중지할 수 있는 상태가 되는 것이다.

suspend의 기능

코 루틴은 일시 중단할 수 있다.

예를 들어 A 코 루틴과 B 코 루틴이 있다고 가정했을 때

A코 루틴에서 B의 코 루틴의 결괏값이 필요한 경우가 생길 수 있다.

이런 경우 A 코 루틴을 일시 중지 한 후 B의 결과값을 가져온 후 다시 A 코루틴을 실행한다.

이와 같은 경우가 callback 지옥을 해결해준다!

suspend 내부 동작

suspend를 붙이면 콜백을 없애주는 줄 알았지만, 그것은 틀렸다.
컴파일 시 내부적으로 다시 콜백을 사용한다.
여러 개의 코 루틴을 사용할 경우
라벨을 붙여 처리할 작업을 나누고
라벨을 통해 지시한다.
이러한 활동을 State Machine라고 한다.

결론

suspend를 붙이는 이유 : 정지 함수로 만들기 위해서다.

레퍼런스

https://reno-blog.netlify.app/suspend-(feat.-)