Coroutine이란

소만이·2024년 6월 29일
0
post-thumbnail

Coroutine을 설명하기 전에 우선 동기처리와 비동기처리의 차이점을 알아야한다.
동기처리란 어떤 요청을 보낸 뒤에 그 요청의 결과값을 얻기까지 작업을 멈추는 것이다. 예를 들어 내가 5분이 걸리는 작업을 수행했는데 그 수행이 끝날 때까지 다른 작업을 하지 못하는 상태라는 것이다.
비동기처리란 어떤 요청을 보낸 뒤에 그 요청의 결과값이 오기까지 멈추지 않고 또 다른 일을 수행하는 것이다. 내가 5분이 걸리는 작업을 수행하는 중에도 다른 작업을 수행할 수 있다는 뜻이다.

Coroutine 은 이 비동기처리와 연관이 있는 개념이다.

따라서 여러 Coroutine이 동시에 실행될 때, 하나의 Coroutine이 suspend 되어 대기 상태에 있더라도 다른 Coroutine들은 동일한 스레드에서 계속 실행될 수 있다. 이러한 방식으로 Coroutine은 비동기 처리를 보다 가볍고 효율적으로 수행할 수 있다.

그럼 어떨 때 suspend를 붙이는 것일까?

비동기 작업을 수행하는 함수: 예를 들어 네트워크 호출, 파일 입출력 등의 작업을 Coroutine 내에서 실행할 때 suspend 함수로 선언된다. 이 함수는 해당 작업이 완료될 때까지 Coroutine을 일시 정지시킨다.

다른 suspend 함수를 호출하는 함수: 이미 suspend 함수가 정의된 함수에서 다른 suspend 함수를 호출할 때도 suspend 키워드가 사용된다. 이는 Coroutine 내에서 다른 Coroutine을 호출할 수 있음을 나타낸다.

Coroutine 빌더 함수 (launch, async, runBlocking 등) 내에서의 람다 함수: Coroutine을 시작하는 빌더 함수에서는 그 빌더 함수의 람다 파라미터가 suspend 함수일 경우 suspend 키워드가 필요하다.

참고자료
(https://velog.io/@haero_kim/Thread-vs-Coroutine-%EB%B9%84%EA%B5%90%ED%95%B4%EB%B3%B4%EA%B8%B0)

0개의 댓글