마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

launch 사용법 질문 있습니다.

0 추천
launch { 내용 }

이렇게만 작성해도, 코루틴이 실행되는거 맞죠?

근데, 보통 스파크님이 알려주실 때에는,

ViewModelscope.launch { 내용 } 나,

Lifecyclescope.launch { 내용 } 형태로 알려주셨잔아요?

그러면, .launch 앞의 뷰모델스코프나, 라이프사이클스코프는 그냥

코루틴의 종류를 정해주기 위해서 쓰이는거 맞나요?

이것에 대한 정보를 아직 찾아보기 전인데, 코루틴 배우다가 갑자기 궁금해서요.

 

저 이제, lifcyclescope랑 ViewModelscope가 뭔지만 배우면, 코루틴 할 수 있을 것 같아요. ㅋㅋ

suspend 역할도 알았고, 비동기가 뭔지도 알았고, 코루틴이 얼마나 가벼운지, join() await() 사용법도

배웠고, runblocking {}까지 ㅎㅎ 잘가르쳐주는 곳에서 배우니 너무 쉽네요 이거.
상쾌한 (1,890 포인트) 님이 2021년 10월 7일 질문
상쾌한님이 2021년 10월 7일 수정

1개의 답변

+1 추천
 
채택된 답변
launch가 어떤 scop에 속한 함수인가가 중요합니다. 코루틴도 라이프가 존재합니다. Coroutine scope을 코루틴의 라이프 사이클을 관리하기 위한 목적입니다. Coroutine은 scope이 종료될 때 그 안에 있는   job들을 취소해주어야 합니다. 이걸 일일이 개발자가 해주어야 한다면, 상당히 번거롭겠죠. 이런 이유로 LifecycleOnwer인 액티비티, 프레그먼트 등에서는 LifecycleScope, 뷰모델에서는 ViewModelScope 등을 제공하고 있습다. 따라서 해당 인스턴스 들 안에서는 이미 제공되어지는Coroutine scope을 사용하는 것이 좋겠죠.  API나 DB엑세스 같은 처리는 별도의 scope 을 만들지 않고 일반적으로 withContext 등으로 쓰레드를 전환하는 형태를 많이 사용합니다. 이걸 ViewModel 같은 곳에서 호출해서 사용하는 것이죠.

참고로, runBlocking은 테스트 코드에서만 사용하시면 되고, 하나의  Coroutine scope 안에서는 같은 scope만 사용하는게  일반적이구요.
spark (227,470 포인트) 님이 2021년 10월 7일 답변
상쾌한님이 2021년 10월 8일 채택됨
답변 감사합니다. 아~ 이제 이해가 다 됐습니다. 그런거였군요. 근데, withContext는 좀 낯서네요. launch나 async는 많이 봤는데, 저건 맨 나중에 본거라.. 그냥 lifecyclescope.launch(Dispatcher.IO) { } 랑 suspend 사용해야겠어요.
...