inflearn logo
강의

Course

Instructor

[Intermediate] Friendly Introduction to JETPACK <Part 2> (Android Kotlin)

Implementing Update/Delete Function

suspend fun 과 viewModelScope.launch 에 대해 궁금합니다.

139

kwangtaeseo9119

3 asked

0


강의를 보니 viewModel 에서 Room 에 CRUD 를 하기 위해서는 비동기 처리를 해야 하고,
1. 이를 위해 viewModelScope.launch 를 사용하는 것 같은데 맞을까요?

  1. viewModel 의 CRUD 함수를 suspend fun 으로 만들면 viewModelScope.launch 를 안써도 되는 건가요?

android kotlin jetpack

Answer 2

0

bokchi

안녕하세요.

  1. 이해하신 부분이 맞습니다.

  2. suspend같은 경우에는 일시 중단으로 만들어주는 것입니다. suspend fun으로 만든다고 해서 비동기처리가 되는 것은 아니기 때문에 viewModelScope.launch를 안써도 되는 것은 아닙니다.

    좀 더 정확한 답변을 위해 코드와 함께 질문주시면 또 답변드리겠습니다.


    감사합니다.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

서광태님, ViewModel에서 비동기 작업을 처리하는 방법에 대해 질문 주셨군요. 비동기 작업은 UI 스레드가 블로킹되지 않도록 하기 위해 중요하며, 특히 데이터베이스 연산 같은 시간이 걸리는 작업에서는 꼭 필요합니다.

  1. viewModelScope.launch 사용: ViewModel에서 비동기적으로 Coroutine을 사용할 때 viewModelScope.launch를 사용하면 ViewModel의 생명 주기에 맞춰 Coroutine이 안전하게 실행될 수 있습니다. 이는 ViewModel이 삭제될 때 Coroutine이 함께 취소되어 메모리 누수를 방지하는 효과가 있습니다.

  2. suspend fun과 viewModelScope.launch: suspend fun은 코틀린 Coroutine의 일시 중단함수로, Coroutine 내에서 호출될 때 비동기적으로 실행됩니다. suspend fun을 정의하는 것만으로는 비동기 실행을 제어할 수 없으며, 실제로 호출할 때 Coroutine을 시작해야 합니다. 따라서 viewModelScope.launch와 같은 Coroutine Builder로 suspend fun을 호출해야 효과적으로 비동기 작업을 수행할 수 있습니다.

쉽게 말해서, suspend fun을 사용한다고 해서 viewModelScope.launch를 대체할 수 있는 것은 아니며 두 개념이 상호 보완적으로 작동합니다. suspend fun으로 선언된 함수는 Coroutine 내에서 실행되어야 하며, 이를 위해 viewModelScope.launch가 일반적으로 사용됩니다.

추가로, Coroutine의 개념과 사용법에 대해 더 알고 싶으시다면 코루틴의 동작 방식을 참조하시면 좋을 것 같습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

1

30

1

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

1

22

1

혹시 강의 내용하면서 실습했던 것을 개인 깃에다 올려도 될까요?

0

14

1

안드로이드 조직 계정 수익 인증 관련

0

32

2

아무도 모르게 책 내시면 모르실 줄 알고!!

1

42

2

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

57

1

스크립트에 대해 질문 있습니다.

1

51

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

55

1

AdMob 계정 승인이 1개월 이상 지연되고 있습니다. 앱 검토와 순서가 어떻게 되는 건가요

0

86

2

구글 플레이 API 업데이트 관련 문의

0

64

2

예전 로드맵과 현재 강의 순서

0

40

1

소스 코드 좀 올려주세요.

0

49

2

개념과 격벽에 대한 이해를 팀과 공유하고 합의하는 방법

1

86

2

JWT토큰 발급 시, subject 값을 다양하게 넣어서 여러 개의 토큰을 만드는 이유

0

51

2

광고 캠페인 종류와 키워드 플래너 관련 질문

0

85

2

안드로이드 기기 실행 오류

0

68

2

테이블 컬럼에 대한 질문

0

61

1

강의에서 사용된 안드로이드 스튜디오 버전을 알고싶어요.

0

64

2

ListAdapter / DiffUtil 관련 강의 문의

0

317

3

DataStoreEx 파트 class MyDataStore(context: Context) { 수정 제안)

0

511

3

강의에서 말씀하시는 레포지토리가

0

303

1

paging lv3 에서 json 받아오는 도메인이 만료됬다고 떠요

0

398

2

Transformations 가 import가 안됩니다!!

0

1145

2

질문드립니다!

0

339

1