Compose 썸네일형 리스트형 [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.. 더보기 [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] Composable 함수들 Jetpack Compose Internals를 참고해 작성하였습니다 Composable 함수들 Composable 함수 Compose의 가장 기본이 되는 요소, Composable 트리 구조 작성하는데 사용Compose Runtime이 Composable 함수를 메모리에서 큰 트리의 구성된 하나의 노드로 이해하고 나타낸다 예시)@Composablefun NamePlate(name:String) { // code} Composable 어노테이션함수가 데이터를 하나의 노드로 변환하여 Composable 트리에 올리겠다는 의도 전달데이터란 함수의 인자를 포함한 함수의 구현 정보를 포괄적으로 의미 입력값은 데이터, 출력은 방출(Emitting)방출은 트리에 요소를 삽입하기 위해 기재된 일련의 동작(act.. 더보기 [Compose] Compose 아키텍처 레이어링 Compose 공식문서를 참고하여 작성하였습니다 Compose는 여러 모듈로 구성되어 있고 각 모듈은 특정 기능을 담당 Compose의 기본 레이어 각 Layer는 하위 수준에 기반하고 상위 수준의 모듈을 만들기 위해 기능 결합 Runtime LayerCompose 런타임의 핵심 기능 (remember, mutableStateOf, @Composable 등)을 제공Compose가 UI를 어떻게 관리하고 업데이트하는지에 대한 기본적인 기능을 담당UI 관련 기능은 포함하지 않는다remember: 컴포저블이 다시 실행될 때에도 값을 유지하는 데 사용mutableStateOf: 상태를 변경하고 UI를 업데이트하는 데 사용@Composable: 컴포저블 함수를 선언하는 데 사용package androidx.co.. 더보기 이전 1 2 다음 목록 더보기