안드로이드 썸네일형 리스트형 [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 처리 (중간 연산자) Flow 처리 (Flow Processing)Flow 생성과 최종 연산 사이의 연산 플로우 처리를 위해 사용하는 함수들변환 연산자, 필터링 연산자, 결합 연산자, 컬렉션 연산자 등등.. 변환 연산자maptransform 사용 / 항상 하나의 값만 emitpublic inline fun Flow.map( crossinline transform: suspend (value: T) -> R): Flow = transform { value -> return@transform emit(transform(value))} 사용 예시suspend fun main() { flowOf(1, 2, 3) .map { it * it } .collect { print(it) }}// .. 더보기 [코루틴-Flow] 생명주기 함수, empty, catch, flowOn, launchIn Flow는요청이 한쪽 방향으로 흐르고 요청에 의해 생성된 값이 다른 방향으로 흐르는 파이프 Flow의 확장함수를 통해 특정 이벤트를 감지할 수 있다 대표적인 Flow의 생명주기 함수는onEach, onStart, onCompletion 등이 있다. onEachFlow의 값을 하나씩 받기 위해 사용upstream flow의 각 값이 downstream으로 emit되기 전에 지정된 작업을 수행하는 연산자public fun Flow.onEach(action: suspend (T) -> Unit): Flow = transform { value -> action(value) return@transform emit(value)} 사용 예시suspend fun main0() { flowOf(1, 2.. 더보기 [코루틴] 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().. 더보기 이전 1 2 3 4 5 다음