본문 바로가기

android

[Compose] Compose Phases Compose 공식 문서를 참고해 번역한 내용입니다.  Compose는 UI를 그리기 위해 3개의 단계를 거친다CompositionLayoutDrawing Compose Phase의 특징단방향 데이터 흐름 및 순차적 실행 (Composition -> Layout -> Drawing)이전 단계의 결과를 재사용할 수 있고 조건에 따라 단계를 skip할 수 있다최적화 (단계 내에서 상태(State)를 추적해 필요한 단계만 다시 실행)State 변경 -> Composition 다시Size 변경 -> Layout 다시색상 변경 -> Drawing 다시 CompositionComposable 함수를 실행하고 UI 설명을 생성UI 트리를 생성하거나 업데이트하는 단계이전 Composition과 비교해 변경된 점을 찾는.. 더보기
[Compose] Composable 수명 주기 Compose 공식 문서를 참고해 번역한 내용입니다.  Composable의 수명주기를 알기 위해서는 Composition에 대해 알아야 한다 Composition은 UI를 구성하는 기본적인 개념이며 Composable UI Tree 구조  Composition은 초기 Composition을 통해서만 생성되고 Recomposition을 통해서만 업데이트 될 수 있다  Initial Composition (초기 컴포지션)처음 Composable 함수가 호출될 때 발생UI 트리를 처음으로 생성하위 Composable 실행Recomposition상태(State)가 변경될 때 트리거되고 상태를 추적해 State를 읽는 모든 Composable 중 skip할 수 없는 모든 Composable 실행효율적으로 변경된.. 더보기
[Compose] Compose 이해하기 Compose 공식 문서를 참고해 번역한 내용입니다. Compose 이해Compose는 선언형 UI 도구선언형 API를 제공하여 앱 UI를 쉽게 관리 선언형 프로그래밍 패러다임 (Declarative Programming Paradigm) 기존 Android View 계층 구조는 UI 위젯의 트리로 표시findViewById 같은 함수를 사용해 트리를 탐색하고 메서드를 호출해 노드를 변경하는 방식기존 방식의 문제점휴먼에러가 발생할 가능성이 크다 대안으로 선언형 UI 프로그래밍으로 전환- 화면 전체를 개념적으로 재생성하고 필요한 변경사항만 적용하는 방식- Compose는 선언형 UI Framework Compose는Data를 받아 Composable 함수들을 정의하여 UI 요소를 내보내 UI를 빌드할 수 .. 더보기
[코루틴-Flow] StateFlow (상태플로우) StateFlow (상태플로우)상태플로우는 Hot flow이며 공유플로우의 개념을 확장replay가 1인 공유플로우와 비슷하게 동작접근 가능한 값 하나(value)를 가지고 있다초기값은 생성자로 전달안드로이드에서 LiveData를 대체하는 최신 방식public interface StateFlow : SharedFlow { // 현재 value public val value: T}public fun MutableStateFlow(value: T): MutableStateFlow = StateFlowImpl(value ?: NULL)// StateFlow, MutableSharedFlow 구현public interface MutableStateFlow : StateFlow, Mutable.. 더보기
[코루틴-Flow] SharedFlow (공유플로우) SharedFlow여러 구독자에게 값을 브로드캐스팅하는 데 사용되는 Hot Flow 일반적인 Flow는 Cold Data라 요청 시 값이 계산되지만SharedFlow는 여러 수신자가 동시에 값을 수집할 수 있다// Read-onlypublic interface SharedFlow : Flow { // 현재 replay 버퍼에 저장된 값들의 스냅샷 public val replayCache: List // 절대 완료되지 않는다, 취소되거나 예외가 발생하지 않는 한 영원히 실행 override suspend fun collect(collector: FlowCollector): Nothing}  MutableSharedFlowBroadcast Channel과 비슷replay는 마지막으로 전.. 더보기
[코루틴] Flow 생성 Flow를 시작하는 방법flowOf 사용public fun flowOf(vararg elements: T): Flow = flow { for (element in elements) { emit(element) }}suspend fun main() { flowOf(1, 2, 3, 4, 5) .collect { print(it) }}// 12345  emptyFlow 사용값이 없는 플로우public fun emptyFlow(): Flow = EmptyFlowprivate object EmptyFlow : Flow { override suspend fun collect(collector: FlowCollector) = Unit}suspend fun main().. 더보기
[코루틴] Flow 원리 실제 Flow 구현 코드제네릭 타입 TFlowCollector 리시버 suspend 람다 파라미터Flow 반환safeFlow 생성 public fun flow( @BuilderInference block: suspend FlowCollector.() -> Unit): Flow = SafeFlow(block)private class SafeFlow( private val block: suspend FlowCollector.() -> Unit) : AbstractFlow() { override suspend fun collectSafely(collector: FlowCollector) { collector.block() }} SafeFlow 클래스AbstractFlow 상.. 더보기
[코루틴] Flow란 - (1) Flow(플로우)코루틴을 기반으로 동작하는 코틀린의 비동기 스트림을 다루기 위한 API순차적으로 값을 방출Cold Stream으로 collect 함수 호출 시 데이터 발행  Flow 인터페이스/*** 값을 순차적으로 내보내고 정상적으로 또는 예외와 함께 완료되는 비동기 데이터 스트림*/public interface Flow { // Flow의 값을 수집하는 함수 // 일시중단 함수로 코루틴 내에서 실행되어야 한다 public suspend fun collect(collector: FlowCollector)}   List vs Sequence vs FlowList모든 원소의 계산이 완료된 Collection작은 데이터 크기에 적합// 한 번에 모든 값을 만드는 Listfun allUser.. 더보기