728x90
반응형

Android 공부/Coroutine 25

[XX캠퍼스] 21.Kotlin Coroutines & Flow ( 코루틴의 내부구조)

Monad (모나드) => flatMap의 파라미터 이름 형태 (값) ->박스 (값) => 값을 받아서 박스 값을 리턴한다. ( 값 ->박스 ) * flatMap 자체는 async 할 수도 sync 할 수도 있다. ( RxJava는.. 이상하다.) Functor 형태 (값) -> (값) => 값을 받아서 값을 리턴한다. ( 값 ->값 ) => 모나드와의 차이 일반적으로 우리가 사용하는 형태는 Functor 이다. * Functor자체는 async 할 수도 sync 할 수도 있다. (역시 RxJava는.. 이상하다.) CPS의 단점 - 끝없는 들여쓰기. - 이해하기 어려움 CPS의 장점 - 모든 제어 흐름을 만들 수 있다. * 코틀린 컴파일러가 컨티뉴에이션과, 상태머신을 만들어낸다.

[XX캠퍼스] 20.Kotlin Coroutines & Flow ( 채널 버퍼링 )

https://dalinaum.github.io/coroutines-example/20 채널 버퍼링 채널 버퍼링 예제 91: 버퍼 이전에 만들었던 예제를 확장하여 버퍼를 지정해보자. Channel 생성자는 인자로 버퍼의 사이즈를 지정 받는다. 지정하지 않으면 버퍼를 생성하지 않는다. import kotlinx.coro dalinaum.github.io *버퍼링을 이용하면 - 자유롭게 보내고, 받으면서 중단되지 않으면서 채널을 사용할 수 있다. 버퍼 이전에 만들었던 예제를 확장하여 버퍼를 지정해보자. Channel 생성자는 인자로 버퍼의 사이즈를 지정 받는다. 지정하지 않으면 버퍼를 생성하지 않는다. import kotlinx.coroutines.* import kotlinx.coroutines.chann..

[XX캠퍼스] 19.Kotlin Coroutines & Flow ( 팬아웃, 팬인 )

https://dalinaum.github.io/coroutines-example/19 팬 아웃, 팬 인 팬 아웃, 팬 인 예제 87: 팬 아웃 여러 코루틴이 동시에 채널을 구독할 수 있습니다. import kotlinx.coroutines.* import kotlinx.coroutines.channels.* fun CoroutineScope.produceNumbers() = produce { var x = 1 while (true) { sen dalinaum.github.io 팬 아웃 여러 코루틴이 동시에 채널을 구독할 수 있습니다. import kotlinx.coroutines.* import kotlinx.coroutines.channels.* fun CoroutineScope.produceNumb..

[XX캠퍼스] 18.Kotlin Coroutines & Flow ( 채널 파이프 라인 )

https://dalinaum.github.io/coroutines-example/18 채널 파이프라인 채널 파이프라인 예제 84: 파이프라인 파이프 라인은 일반적인 패턴입니다. 하나의 스트림을 프로듀서가 만들고, 다른 코루틴에서 그 스트림을 읽어 새로운 스트림을 만드는 패턴. import kotlinx.cor dalinaum.github.io 파이프라인 파이프 라인은 일반적인 패턴입니다. 하나의 스트림을 프로듀서가 만들고, 다른 코루틴에서 그 스트림을 읽어 새로운 스트림을 만드는 패턴. import kotlinx.coroutines.* import kotlinx.coroutines.channels.* // 리시브 채널 fun CoroutineScope.produceNumbers() = produce {..

[XX캠퍼스] 17.Kotlin Coroutines & Flow ( 채널 기초 )

https://dalinaum.github.io/coroutines-example/17 채널 기초 채널 기초 예제 80: 채널 채널은 일종의 파이프입니다. 송신측에서 채널에 send로 데이터를 전달하고 수신 측에서 채널을 통해 receive 받습니다. (trySend와 tryReceive도 있습니다. 과거에는 null을 반환 dalinaum.github.io 채널 채널은 일종의 파이프입니다. 송신측에서 채널에 send로 데이터를 전달하고 수신 측에서 채널을 통해 receive 받습니다. (trySend와 tryReceive도 있습니다. 과거에는 null을 반환하는 offer와 poll가 있었습니다.) import kotlinx.coroutines.* import kotlinx.coroutines.chan..

[XX캠퍼스] 16.Kotlin Coroutines & Flow ( 런칭 )

https://dalinaum.github.io/coroutines-example/16 플로우 런칭 플로우 런칭 예제 78: 이벤트를 Flow로 처리하기 addEventListener 대신 플로우의 onEach를 사용할 수 있습니다. 이벤트마다 onEach가 대응하는 것입니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun e dalinaum.github.io 이벤트를 Flow로 처리하기 addEventListener 대신 플로우의 onEach를 사용할 수 있습니다. 이벤트마다 onEach가 대응하는 것입니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun event..

[XX캠퍼스] 15.Kotlin Coroutines & Flow ( 완료 처리하기 )

https://dalinaum.github.io/coroutines-example/15 플로우 완료처리하기 플로우 완료처리하기 예제 75: 명령형 finally 블록 완료를 처리하는 방법 중의 하나는 명령형의 방식으로 finally 블록을 이용하는 것입니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun simple() dalinaum.github.io finally onCompletion - 문제 발생여부를 알수 있다. 명령형 finally 블록 완료를 처리하는 방법 중의 하나는 명령형의 방식으로 finally 블록을 이용하는 것입니다. import kotlinx.coroutines.* import kotlinx.coroutines...

[XX캠퍼스] 14.Kotlin Coroutines & Flow ( 예외처리하기 )

https://dalinaum.github.io/coroutines-example/14 플로우 예외처리하기 플로우 예외처리하기 예제 71: 수집기 측에서 예외처리하기 예외는 collect을 하는 수집기 측에서도 try-catch 식을 이용해 할 수 있습니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun simple(): Fl dalinaum.github.io try-catch 식을 이용 catch() 연산자를 이용해 업스트림에서만 예외처리 수집기 측에서 예외처리하기 예외는 collect을 하는 수집기 측에서도 try-catch 식을 이용해 할 수 있습니다. import kotlinx.coroutines.* import kotlinx...

[XX캠퍼스] 13.Kotlin Coroutines & Flow ( 플래트닝 )

https://dalinaum.github.io/coroutines-example/ 코루틴 실습 dalinaum.github.io 플로우에서는 3가지 유형의 flatMap을 지원하고 있습니다. flatMapConcat, flatMapMerge, flatMapLatest 입니다. flatMap 이란 ?? https://wooooooak.github.io/kotlin/2019/05/04/Map-vs-flatMap/ map과 flatMap에 대하여 · 쾌락코딩 map과 flatMap에 대하여 04 May 2019 | kotlin FP basic FlatMap을 이해하기 위해 Map과 FlatMap의 차이점을 알아보자. Map map은 이해하기 쉽다. 반복 가능한 배열을 대상으로, 배열의 각 요소를 하나하나 순..

[XX캠퍼스] 12.Kotlin Coroutines & Flow ( Flow 결합하기 )

zip으로 묶기 combine으로 묶기 zip으로 묶기 zip은 양쪽의 데이터를 한꺼번에 묶어 새로운 데이터를 만들어 냅니다. import kotlinx.coroutines.* import kotlinx.coroutines.flow.* fun main() = runBlocking { val nums = (1..3).asFlow() val strs = flowOf("일", "이", "삼") nums.zip(strs) { a, b -> "${a}은(는) $b" } .collect { println(it) } } 실행결과 1은(는) 일 2은(는) 이 3은(는) 삼 combine으로 묶기 combine은 양쪽의 데이터를 같은 시점에 묶지 않고 한 쪽이 갱신되면 새로 묶어 데이터를 만듭니다. import kotl..

728x90
반응형