목록전체 글 (140)
시배's Android
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bplbqV/btspMkTuO8O/5fGplZa9MyKc7bVwvCUib1/img.png)
컴포저블 수명 주기 | Jetpack Compose | Android Developers 컴포저블 수명 주기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 페이지에서는 컴포저블의 수명 주기에 관해 알아보며 Compose에서 컴포저블에 재구성 developer.android.com Lifecycle overview Composition은 앱의 UI를 설명하는 데 사용되며, Composable 함수들을 실행하여 생성됩니다. Composition은 UI를 설명하는 Composable 함수들의 트리 구조입니다. Jetpack Compose는 처음으로 Composable 함수들을 실행할 때 초기 구성(initial composition) 중에 사용된 Composable 함수들을..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/leeOJ/btspmWG7qgH/PPdKC6MTaKgoAXAZi0MC51/img.png)
MVI and Orbit 이 다이어그램은 Orbit 시스템(또는 MVI/Redux/Cycle과 유사한 시스템)이 간단한 원리로 작동하는 방식을 간략하게 보여줍니다. UI는 비동기적으로 비즈니스 컴포넌트에게 액션을 보냅니다. 비즈니스 컴포넌트는 들어오는 액션을 비즈니스 로직으로 변환합니다. 비즈니스 컴포넌트는 이후 이벤트를 더 아래 단계로 발생시킵니다. 모든 이벤트는 시스템의 현재 상태와 함께 reduce되어 새로운 상태를 생성합니다. 이 상태는 다시 UI에게 발행되고, UI는 상태에 따라 자신을 렌더링합니다. 중요한 점은 UI가 비즈니스 결정을 스스로 내릴 수 없다는 것입니다. UI는 입력 상태에 따라 자신을 렌더링하는 방법만 알아야 합니다. Orbit components 위의 로직을 실제 구성 요소에 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nUsyL/btspBzpWCke/TbN6EGjpk0KVbleQ61KpQk/img.png)
상태 및 Jetpack Compose | Android Developers 상태 및 Jetpack Compose 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱의 상태는 시간이 지남에 따라 변할 수 있는 값을 의미합니다. 이는 매우 광범위한 정 developer.android.com State and composition Compose는 선언적이기 때문에 업데이트하는 유일한 방법은 동일한 컴포저블을 새 인수로 호출하는 것입니다. 이러한 인수들은 UI 상태의 표현입니다. 상태가 업데이트될 때마다 재구성이 발생합니다. 그 결과, TextField와 같은 요소들은 명령형 XML 기반 뷰와 같이 자동으로 업데이트되지 않습니다. 컴포저블은 명시적으로 새 상태를 알려주어야만 해당 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rSke5/btspBzXJ2Wj/jH034IjVYBW0QhRL0qbgi0/img.png)
Compose 이해 | Jetpack Compose | Android Developers Compose 이해 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Jetpack Compose는 Android를 위한 현대적인 선언형 UI 도구 키트입니다. Compose는 프런트엔드 뷰를 명령 developer.android.com The declarative programming paradigm 과거에는 안드로이드 뷰 계층 구조를 UI 위젯의 트리로 표현했습니다. 앱의 상태가 사용자 상호작용과 같은 이유로 변경될 때, UI 계층 구조를 업데이트하여 현재 데이터를 표시해야 했습니다. UI를 업데이트하는 가장 일반적인 방법은 findViewById()와 같은 함수를 사용하여 트리를 순..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cH4qMM/btso6Nbnj7m/eVzx51fxiokk6ViHVSHKsk/img.png)
MVI에 대해 생각할 때, 프로세스는 세 가지 핵심 개념으로 요약됩니다: 단방향 데이터 흐름 - 즉, 데이터가 한 방향으로 흐릅니다. Intent(의도) 처리는 논블로킹(non-blocking)입니다. 상태는 불변(immutable)합니다 - Model 외부에서는 변경할 수 없습니다(일반적으로 Android에서는 ViewModel 내부에서 처리됩니다). 개념적으로 MVI는 복잡하지 않으므로, 왜 직접 구현하는 대신 프레임워크를 사용해야 할까요? MVI 스타일의 프레임워크를 작성하는 것은 보다 복잡한 일입니다: - 기기 회전 및 프로세스 종료와 같은 라이프사이클 문제를 처리해야 합니다. - 다양한 쓰레딩 문제가 발생할 수 있습니다. - 멀티쓰레딩 코드와 함께 프레임워크에 대한 테스트를 작성해야 합니다. -..
fun Modifier.topFadingEdge( lazyListState : LazyListState, length : Dp, edgeColor : Color? = null ) = composed( debugInspectorInfo { name = "length" value = length } ){ val color = edgeColor ?: MaterialTheme.colorScheme.surface drawWithContent { val topFadingEdgeStrength by derivedStateOf { lazyListState.layoutInfo.run { val firstItem = visibleItemsInfo.first() when { visibleItemsInfo.size in 0...
채널의 이해 채널은 동시성 코드 간에 서로 안전한 통신을 할 수 있도록 해주는 도구다. 채널은 실행 중인 스레드에 상관없이 서로 다른 코루틴 간에 메시지를 안전하게 보내고 받기 위한 파이프라인으로 생각할 수 있다. 채널 유형과 배압 Channel의 send()는 일시 중단 함수다. 흔히 배압이라고 하며 리시버가 실제로 처리할 수 있는 것보다 더 많은 요소들로 채널이 넘치지 않도록 도와준다. 배압을 구성하기 위해 채널에 대한 버퍼를 정의할 수 있다. 채널을 통해 데이터를 보내는 코루틴은 채널 안의 요소가 버퍼 크기에 도달하면 일시 중단된다. 채널에서 요소가 제거되는 즉시, 송신자는 다시 재개된다. 언버퍼드 채널 버퍼가 없는 채널을 언버퍼드 채널이라고 한다. RendezvousChannel send()를 호..
Mavericks + Compose + Naver API Android 앱 개발에서 최신 기술인 Mavericks와 Compose를 활용하여 Naver API를 사용하여 책을 검색하는 앱을 구현해보겠습니다. MavericksState data class SearchUiState( val keyword: String = "", val books: Async = Uninitialized ) : MavericksState 책 검색 앱에서 사용할 SearchUiState 클래스는 Mavericks의 MavericksState 인터페이스를 구현합니다. 이 클래스는 책 검색 UI의 상태를 관리하고, 검색어 키워드와 검색 결과인 책 목록을 저장합니다. Async 클래스는 비동기 작업을 처리하기 위해 Mavericks..