android 썸네일형 리스트형 [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) - (4) Modifier Jetpack Compose Internals를 참고하여 작성하였습니다 Modifier는 Compose UI에서 굉장히 중요한 부분이다 Modifier 체인 모델링 (Modeling modifier chains)Modifier 인터페이스는 UI Composable을 장식하거나 동작을 추가하는 불변 요소의 컬렉션을 모델링 3가지 기능을 제공하는 추상화then (수정자의 모든 유형을 체인으로 결합)foldIn, foldOut (체인을 통과하면서 값을 누적)any, all (체인 내 any, all 조건과 일치하는지 확인하는 연산 제공) Modifier.kt@Stable@JvmDefaultWithCompatibilityinterface Modifier { /** * initial 값으로 시작해.. 더보기 [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] 컴포즈 UI (Compose UI) - (2) Measure(측정) Jetpack Compose Internals를 참고하여 작성하였습니다 Compose UI에서의 측정 (Measuring in Compose UI)실제 측정이 어떻게 이뤄지는가 모든 LayoutNode는 Owner를 통해 재측정을 요청할 수 있다요청 시 Owner(뷰)는 "dirty"로 표시(invalidate)되며 노드는 재측정 및 재배치할 노드 목록에 추가된다다음 그리기 시점에 AndroidComposeView의 dispatchDraw 함수가 호출된다AndroidComposeView는 재측정 및 재배치할 노드 목록을 순회하고 해당 작업 수행 재측정 및 재배치가 예정된 노드에 적용되는 3가지 단계노드가 재측정이 필요한지 확인 후 재측정 수행측정 후, 재배치가 필요한지 확인 후 재배치 수행모든 노드에 .. 더보기 [ComposeInternals] 컴포즈 UI (Compose UI) - (1) Jetpack Compose Internals를 참고하여 작성하였습니다 Compose UIKotlin 멀티플랫폼 프레임워크이며 Composable 함수를 통해 UI를 방출하는 구현을 제공 Compose Runtime과 UI를 통합할 때의 목표화면의 레이아웃 트리를 구축하는 것 트리에 사용되는 노드 타입은 Compose UI만 알고 런타임은 알지 못한다그래서 런타임은 트리에서 노드의 작업(삽입, 제거, 이동 등)을 Client 라이브러리에 위임 초기 Composition 과정에서는 변경 목록이 모든 노드를 삽입하여 레이아웃 트리를 구축하고Recomposition 과정에서 변경 목록은 트리를 업데이트 한다 이 과정에 대해 자세히 살펴보자 예약된 변경 목록을 실제 트리의 변경 목록으로 매핑(Mapping sc.. 더보기 [ComposeInternals] 컴포즈 런타임 (ComposeRuntime) - (3) Recomposer Jetpack Compose Internals를 참고하여 작성하였습니다 https://kancho.tistory.com/61 ComposeRuntime - (2)에서는 Composition에 대한 내용을 작성 이 글에서는 Recomposer에 대해 알아본다 RecomposerRecomposer는 ControlledComposition을 제어하고 변경 사항들을 적용하기 위해 필요할 때 Recomposition을 트리거한다또한 Composition을 시작하거나 Recomposition할 스레드 및 변경 사항을 적용할 때 필요한 스레드를 결정한다 Recomposer를 생성하고 invalidation을 대기 시키는 방법 Recomposer 생성 (Spawning the Recomposer)클라이언트에서 C.. 더보기 이전 1 2 3 4 ··· 7 다음