안드로이드의 대표적인 비동기 처리라고 하면 코루틴을 떠올릴텐데, 이러한 코루틴을 더 효율적으로 프로그래밍 하기 위해 나온 도구가 Flow 입니다.
데이터 스트림을 효율적으로 처리하고 관리하기 위해 등장을 하였죠
Flow의 주요 특징
- 비동기 데이터 처리 : 코루틴과 함께 사용하기에 물론 비동기로 동작 합니다.
- 데이터 스트림 관리 : Flow는 데이터 스트림을 생성하고, 변환, 결합하는 등 다양한 작업을 수행할 수 있습니다. 이를 통해 복잡한 비동기 작업을 명확하고 간결하게 코드를 작성할 수 있습니다.
- 백프레셔 처리 : 백프레셔는 데이터 생산 속도가 데이터 소비 속도보다 빠른 경우 발생하는 문제입니다. Flow는 백프레셔를 처리하여 데이터 손실 없이 데이터 스트림을 안전하게 처리할 수 있도록 도와줍니다.
- 용이한 테스트 : 단위 테스트를 통해 Flow 코드를 쉽게 테스트하고 문제를 진단할 수 있습니다.
Flow의 활용
Flow는 다양하게 활용할 수 있으나 대표적으로 활용할 수 있는 것은 네트워크 데이터 처리와 백그라운드 작업이라고 볼 수 있습니다.
네트워크(API 등) 데이터를 불러오거나 혹은 로딩하는 UI 작업을 진행할 수 있습니다.
백그라운드에서 수행되는 작업의 진행 상황또한 UI에 표시할 수 있습니다.
Flow는 센서 데이터 처리와 파일 시스템 작업등에도 활용할 수 있습니다.
Flow의 장점
이렇게만 보아도 Flow의 장점을 알 수 있지만, 다시 간단하게 정리해보겠습니다
- 코드 간결성 향상 : 비동기 코드를 더욱 간결하고 읽기 쉽게 작성할 수 있습니다.
- 코드 유지 보수성 향상 : 비동기 코드를 더욱 쉽게 유지 관리할 수 있습니다.
- 테스트 용이 : 테스트를 더욱 쉽게 할 수 있습니다.
- 앱 성능 향상
Flow의 예시 코드
fun numbersFlow() = flow {
emit(1)
emit(2)
emit(3)
}
emit 함수를 사용하여 Flow를 생성합니다.
numbersFlow().collect { number ->
println(number)
}
생성된 Flow에서 데이터를 읽어올 수 있습니다.
collect 함수를 사용하여 Flow에서 방출되는 값을 하나씩 처리합니다.
numbersFlow()
.onErrorResume { throwable ->
// 오류 발생 시 처리할 로직
flow {
emit(-1) // 예시: 오류 발생 시 -1 값을 방출
}
}
.collect { number ->
println(number)
}
Flow를 사용하여 오류 및 예외 상황을 컨트롤할 수 있습니다.
Flow에는 다양한 연산자가 있기에 상황에 따라 필요한 다양한 함수와 연산자를 사용하여 필요한 값을 만들 수 있습니다.
추가로 Google의 Paging 라이브러리르 사용하기 위해서도 Flow가 적용되어야 합니다.
'[# 2]…My DevelopStory' 카테고리의 다른 글
[Android Compose] Compose Dagger Hilt 적용하기 (0) | 2024.08.26 |
---|---|
[Android] Di 주입, Dagger 라이브러리 Hilt의 핵심개념 (1) | 2024.05.08 |
[Android] Keyboard show/hide detect Listener Utile (0) | 2023.06.02 |
[Flutter] Flutter의 미래 전망: 구글이 이끄는 크로스 플랫폼 앱 개발 혁신 (0) | 2023.06.01 |
[Android] Could not resolve all files for configuration ':app:debugCompileClasspath'. - Build Error (0) | 2023.05.30 |