본문 바로가기

Android11

Compose 이해 명령형 UI vs 선언형 UI 명령형 UI 지금까지 Android 뷰 계층 구조는 UI위젯의 트리로서 나타냈다. 사용자의 상호작용으로 앱의 상태가 변경되면, 현재 데이터를 표시하기 위해 UI계층을 업데이트 해야한다. 데이터가 변경되면 findViewById()로 뷰를 탐색하고, button.setText(String), container.addChild(View) 또는 img.setImageBitmap(Bitmap)과 같은 메서드를 호출하여 UI 내부 상태를 바꾸어 업데이트 해야하는 것이다. 이런 방식으로 뷰를 수동으로 업데이트하면 오류가 발생할 가능성이 커지고, 앱을 유지 관리하는 것이 복잡해진다. 선언형 UI 처음부터 화면 전체를 개념적으로 재생성한 후 필요한 변경사항만 적용하는 방식으로 작동한다. .. 2023. 10. 26.
[Kotlin/coroutine] 6. Asynchronous Flow (2) Composing multiple flows multiple flow를 구성하는 여러 방법을 알아보자. Zip Kotlin 표준 라이브러리에 있는 Sequence의 zip처럼 flow도 두개의 flow를 합치기 위한 zip연산자가 있다. 코드 val nums = (1..3).asFlow() // numbers 1..3 val strs = flowOf("one", "two", "three") // strings nums.zip(strs) { a, b -> "$a -> $b" } // compose a single string .collect { println(it) } // collect and print 실행 결과 1 -> one 2 -> two 3 -> three Combine flow가 변수나 작업의.. 2023. 10. 26.
[Kotlin/coroutine] 5. Asynchronous Flow (1) 중단 함수는 비동기적으로 단일 값을 리턴한다. 하지만 우리는 비동기적으로 계산된 여러개의 값을 어떻게 리턴할 수 있을까? 그래서 Flow가 등장하게 되었다! Representing multiple values 여러개의 값들은 Kotlin에서 collections를 사용해서 나타낼 수 있다. 예를 들어, 3개의 숫자는 리스트로 리턴하고, forEach를 사용해서 출력할 수 있다. 코드 fun simple(): List = listOf(1, 2, 3) fun main() { simple().forEach { value -> println(value) } } 실행 결과 1 2 3 Sequences CPU를 사용해서 각 계산에 100ms정도가 소요되는 blocking code에서 계산하는 경우 Sequence를.. 2023. 10. 25.
[Kotlin/Coroutine] 4. Coroutine context and dispatchers 코루틴은 항상 Kotlin표준 라이브러리에 정의된 CoroutineContext 타입의 값으로 표시되는 컨텍스트에서 실행된다. 코루틴 컨텍스트는 다양한 요소의 집합이다. 주요 요소로 코루틴의 Job과 Dispatcher가 있다. Dispatchers and threads Coroutine Context의 구성 코루틴의 실행에 사용되는 Thread 스레드를 결정하는 Coroutine Dispatcher Coroutine Dispatcher의 동작 코루틴의 실행을 특정 스레드로 제한 코루틴을 Thread pool에 보냄 코루틴을 무제한으로 실행할 수 있도록 함 launch와 async같은 모든 코루틴 빌더는 새로운 코루틴과 다른 컨텍스트 요소에 특정 Dispatcher를 지정할 수 있는 CoroutineCo.. 2023. 10. 24.