안드로이드 썸네일형 리스트형 [ComposeInternals] Compose Runtime 고급 사용 사례 (Advanced Compose Runtime use cases) Jetpack Compose Internals를 참고하여 작성하였습니다 Compose Runtime vs Compose UICompose RuntimeCompose의 기본적인 기계 장치와 제공상태 관리와 composition 관련 원시 요소(primitives)를 제공UI에 제한되지 않고 다양한 트리 구조를 관리할 수 있음Kotlin이 실행되는 모든 플랫폼에서 사용 가능Android나 UI에 직접적인 의존성이 거의 없음Compose UI새로운 안드로이드 UI 툴킷, 캔버스 위에 LayoutNode 트리가 표현하는 내용을 그림안드로이드 UI 개발에 특화됨 멀티플랫폼 지원Compose Runtime은 UI 외에 다양한 트리 구조를 만드는데 사용할 수 있다Compose for DesktopAndroid 구현.. 더보기 [ComposeInternals] 이펙트와 이펙트 핸들러 (Effects and Effect handlers) Jetpack Compose Internals를 참고하여 작성하였습니다 사이드 이펙트 (Side effects)함수의 제어나 범위를 벗어나는 모든 것함수의 호출자가 기대한 것과 다른 동작을 발생시키고 함수의 동작을 변경할 수 있는 것함수를 비결정적으로 만들고 개발자가 코드를 추론하기 어렵게 함테스트 가능성이 줄어들고 결함이 발생할 가능성이 생김전역 변수 쓰기/읽기, 메모리 캐시 접근, DB 작업, 네트워크 쿼리 수행 등등이 부작용의 예시 사이드 이펙트가 없는 순수함수순수 함수 (pure function)동일한 입력에 항상 같은 결과를 반환하고 부작용 (side effect)이 없으며, 함수 외부 상태에 의존하지 않고 결정적인 함수 예시1) 순수 함수fun add(a: Int, b: Int) = a + .. 더보기 [ComposeInternals] 상태 스냅샷 시스템 (State snapshot system) Jetpack Compose Internals를 참고하여 작성하였습니다 상태 스냅샷 시스템상태를 표현하고 상태 변경 사항을 전파해 반응형 경험을 제공하는 방법 스냅샷 상태 (What snapshot state is)변경 사항을 기억하고 관찰할 수 있는 분리된 상태이며 ComposeRuntime에 정의된 상태 스냅샷 시스템의 일부(mutableStateOf, mutableStateListof, derivedStateOf 등의 함수를 호출할 때 얻는 상태) 스냅샷 상태 시스템은상태 변경과 변경 전파를 모델링하고 조정독립적 형태로 작성되어 다른 라이브러리에서도 사용이 가능 스냅샷 상태 시스템의 특징스냅샷 상태가 자동으로 관찰되는 메커니즘Compose 컴파일러가 모든 Composable 함수와 표현식을 래핑.. 더보기 [ComposeInternals] 컴포즈 UI (Compose UI) - (3) Layout Constraints (제약 조건) Jetpack Compose Internals를 참고하여 작성하였습니다 레이아웃 제약 조건 (Layout Constraints)제약 조건은 부모 LayoutNode나 modifier로부터 올 수 있다자식 레이아웃을 측정하기 위해 제약 조건을 사용한다 대부분의 레이아웃은 1. 자식에게 수정되지 않은 제약 조건을 전달하거나 2. 최소 제약 조건을 완화한다 (0으로 설정) -> Box 부모 노드나 modifier는 자식에게 크기가 얼마인지 묻기도 한다이 경우 무한한 제약 조건을 내려보낼 수 있다 (Constraints.Infinity)자식 컴포넌트가 자신의 크기를 결정할 수 있는 자유가 부여된다 예시) Box Composable// 일반적으로 Box는 부모의 전체 높이를 채움// LazyColumn 안에서.. 더보기 [ComposeInternals] 컴포즈 런타임 (ComposeRuntime) - (2) Composition Jetpack Compose Internals를 참고하여 작성하였습니다 https://kancho.tistory.com/60 ComposeRuntime - (1)에서는 Composer에 대한 내용을 작성 이 글에서는 Composition에 대해 알아본다 CompositionComposition을 생성하는 주체는 누구이며 어떻게, 언제 이루어져있는지 알아보자 Composition이 생성되면 Composer는 스스로 구축한다Composer는 currentComposer 메커니즘을 통해 접근하고, Composition이 관리하는 트리를 생성하고 업데이트하는 데 사용된다 Compose Runtime으로 접근하는 2가지 진입점Composable 함수를 작성해 관련된 모든 정보를 방출하고 런타임과 연결setCont.. 더보기 [ComposeInternals] 컴포즈 런타임 (ComposeRuntime) - (1) Composer Jetpack Compose Internals를 참고하여 작성하였습니다 이 글에서는 Composable 함수가 composition에 어떻게 변경사항을 방출(emit)하고 컴파일러를 통해 주입된 composer 인스턴스를 이용해 composition이 연관된 정보를 업데이트 받는 방법을 소개한다 컴포즈 런타임 (Compose Runtime)Compose Runtime의 동작 순서Composition 단계Composable 함수를 실행하고 이 단계에서 일어난 모든 정보를 슬롯 테이블에 저장한다변경 목록 생성Composer가 슬롯 테이블에 저장된 정보를 기반으로 UI 변경사항을 파악해 변경 목록 생성변경 사항 적용Applier(최종적으로 트리 구체화)가 변경 목록을 적용실제 노드 트리를 구체화한다Recomp.. 더보기 [ComposeInternals] Compose 컴파일러(1) - 어노테이션 Jetpack Compose Internals를 참고해 작성하였습니다 Jetpack Compose는 다양한 라이브러리로 구성되어 있다대표적으로 Compose Compiler, Compose Runtime, Compose UI가 있다 Compose 코드는 Compose Compiler에 의해 Compose Runtime이 이해할 수 있는 코드로 변환되고, Runtime은 이 코드를 실행하여 UI를 구성하고 관리한다 먼저 Compose Compiler에 대해 알아보자 Compose CompilerKotlin 함수에 Composable 어노테이션을 선언하면 해당 함수는 Composable 함수로 변형된다Kotlin에서는 어노테이션을 처리할 때 보통 kapt, ksp를 사용한다 하지만 Compose에서는 어노.. 더보기 [Compose] Compose 아키텍처 레이어링 Compose 공식문서를 참고하여 작성하였습니다 Compose는 여러 모듈로 구성되어 있고 각 모듈은 특정 기능을 담당 Compose의 기본 레이어 각 Layer는 하위 수준에 기반하고 상위 수준의 모듈을 만들기 위해 기능 결합 Runtime LayerCompose 런타임의 핵심 기능 (remember, mutableStateOf, @Composable 등)을 제공Compose가 UI를 어떻게 관리하고 업데이트하는지에 대한 기본적인 기능을 담당UI 관련 기능은 포함하지 않는다remember: 컴포저블이 다시 실행될 때에도 값을 유지하는 데 사용mutableStateOf: 상태를 변경하고 UI를 업데이트하는 데 사용@Composable: 컴포저블 함수를 선언하는 데 사용package androidx.co.. 더보기 이전 1 2 3 4 ··· 6 다음