profile image

L o a d i n g . . .

반응형

 

안드로이드의 대표적인 비동기 처리라고 하면 코루틴을 떠올릴텐데, 이러한 코루틴을 더 효율적으로 프로그래밍 하기 위해 나온 도구가 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가 적용되어야 합니다.

반응형
복사했습니다!