inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[중급편] 친절한 JETPACK 개론 <하> (Android Kotlin)

Update / Delete 기능 구현

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

139

서광태

작성한 질문수 3

0


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

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

android kotlin jetpack

답변 2

0

개복치개발자

안녕하세요.

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

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

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


    감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 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의 개념과 사용법에 대해 더 알고 싶으시다면 코루틴의 동작 방식을 참조하시면 좋을 것 같습니다.

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

부하 테스트 시 설정 관련 질문드립니다

1

23

1

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

1

69

1

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

1

50

1

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

0

25

1

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

0

46

2

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

1

54

2

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

1

79

2

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

1

60

1

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

2

71

1

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

0

105

2

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

0

82

2

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

0

47

1

소스 코드 좀 올려주세요.

0

53

2

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

1

90

2

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

0

55

2

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

0

101

2

안드로이드 기기 실행 오류

0

72

2

테이블 컬럼에 대한 질문

0

74

1

ListAdapter / DiffUtil 관련 강의 문의

0

317

3

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

0

514

3

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

0

303

1

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

0

398

2

Transformations 가 import가 안됩니다!!

0

1146

2

질문드립니다!

0

340

1