코루틴 async & await

김정현·2024년 4월 12일

Coroutine 병렬처리를 위한 async & await

이번 프로젝트를 진행하면서 비동기처리를 위해 coroutine을 사용했다.
지금까지 coroutine을 사용하면서 코루틴 빌더중에 launch를 계속해서 사용했지만,
이번 프로젝트를 진행하면서 병렬처리를 통해서 속도 개선을 하고 네트워크 작업이 완료 된 후 진행되어야 하는 작업의 타이밍을 맞추기 위해서 async를 사용해보고 해당 내용을 정리해보려고 한다.

async

코루틴을 시작하는 코루틴빌더의 한 종류로 launch와 다르게 Deferred객체를 결과로 반환 받는다.
async를 사용하면 여러 비동기 작업을 동시에 수행할 수 있어 코드의 효율이 향상된다.

await

기본적으로 async에서 시작된 코루틴이 완료될때까지 다음 코드로 진행을 막아주는 역할을 한다.

async와 await 활용 예시

내가 직접 이번 프로젝트에서 사용한 코드를 예시로 가져왔다.

viewModelScope.launch {

	// async 함수를 통해서 날씨와 미세먼지 데이터를 받아오는 비동기 작업을 시작
	val weatherDeferred = async { getWeatherInfo() }
    val dustDeferred = async { getDustInfo() }
    
    // 각각의 반환 결과를 list로 만듦
    val list = mutableListOf(weatherDeferred, dustDeferred)

	list.awaitAll()
    
    // list에 있는 비동기 작업이 끝난 뒤 아래 코드를 실행
	setWeatherPreview()
}

마치며

항상 launch만 써서 코루틴을 사용하다가 이번에 async와 await을 통해 비동기 작업을 병렬로 처리해보면서 코루틴에 대해 좀 더 알게 된거같다는 생각이든다 아직 많이 부족하겠지만..

profile
안녕하세요 반갑습니다

0개의 댓글