본문 바로가기
Android

[Android] collectAsState()와 collectAsStateWithLifecycle() 차이점

by Echung 2023. 11. 9.

 안드로이드 유튜브를 보던 중 collectAsState()와 collectAsStateWithLifecycle()에 대한 내용을 보게 되어 이전에 collectAsState()를 사용해서 앱을 개발한 적이 있어 공부를 하게 되었다.


CollectAsState()

 collectAsState 함수는 Koltlin Flows를 관찰하고 해당 값을 'State' 클래스로 변환한다. State 클래스는JetpackCompose 라이브러리에서 사용되는 불변성을 가진 상태 관리 클래스이다. 

 

CollectAsState 함수 사용법

val flow: Flow<T> = // your flow here

val state: State<T> by flow.collectAsState(initial = initialValue)

  이 함수는 'flow'에서 데이터를 수집하고 'State' 객체로 변환한다. 'initialValue'매개변수는 Flow에서 아직 값을 수신하지 않았을 때 기본적으로 사용할 값을 나타낸다.


CollectAsStateWithLifecycle()

 collectAsStateWithLifeCycle 함수는 Android의 라이프사이클과 함께 동작하는 버전의 'collectAsState' 함수이다. 이 함수를 사용하면 Android 라이프사이클을 자동으로 처리하여 메모리 누수를 방지할 수 있다. 

 

CollectAsStateWithLifecycle 함수 사용법

val flow: Flow<T> = // your flow here

val state: State<T> by flow.collectAsStateWithLifecycle(
    lifecycle = lifecycle, 
    initial = initialValue
)

  'lifecycle' 매개변수는 Android 컴포넌트의 라이프사이클을 나타내며, 'initialValue매개변수는 Flow에서 아직 값을 수신하지 않았을 때 기본적으로 사용할 값을 나타낸다.


차이점

사진 1. CollectAsState, CollectAsStateWithLifecycle을 라이프 사이클에 맞추어 비교하는 사진

 

collectAsState 특징

  • 라이프사이클 처리 없음 : 'collectAsState'는 라이프사이클 처리를 하지 않는다. 이는 데이터가 비동기적으로 흘러들어올 때 라이프사이클을 수동으로 관리해야 한다는 의미이다.
  • 단순함 : 라이프사이클 처리가 필요 없기 때문에 간단하고 직접적으로 사용할 수 있다.

 

collectAsStateWithLifecycle 특징

  • 자동 라이프사이클 관리 : 'collectAsStateWithLifecycle'는 Android의 라이프사이클을 자동으로 처리해준다. 이를 통해 데이터 흐름이 관찰자에게 알맞게 연결되며, 라이프사이클과 관련된 메모리 누수를 방지할 수 있다.
  • 편리함 : 라이프사이클 처리를 자동으로 처리해주기때문에 편리하게 사용할 수 있다.

마치며

Kotlin과 Android를 공부하면서 collectAsState와 collectAsStateWithLifecycle을 알게 되었다. Android에서는 라이프사이클을 자동으로 처리해 주는 collectAsStateWithLifecycle을 사용하는 것이 더 적절한 것 같다. 앞으로는 collectAsStateWithLifecycle을 사용하도록 해야겠다.

반응형

'Android' 카테고리의 다른 글

[Android] 안드로이드 난독화 및 최적화하기  (0) 2023.12.14
[Android] 안드로이드 스튜디오에서 릴리즈 버전 테스트하기  (0) 2023.12.13
RxJava란  (0) 2022.03.15
AsyncTask 정지...(deprecated)  (0) 2022.03.08
MVVM패턴  (0) 2022.03.07