Android/Compose6 [Android/Compose] collectAsState()를 활용한 상태 관리 Jetpack Compose에서 Flow 또는 StateFlow를 UI에서 구독할 때, 상태를 효율적으로 관리하는 것이 중요합니다.이때 collectAsState()를 사용하면 Flow를 State로 변환하여 UI가 자동으로 최신 상태를 반영할 수 있습니다.이번 글에서는 collectAsState()가 무엇이며, 어떻게 사용해야 하는지 공부 한 내용을 정리하겠습니다.1. collectAsState()란?collectAsState()는 Jetpack Compose에서 Flow나 StateFlow를 구독하여 State로 변환하는 함수입니다.이 함수를 사용하면 Composable 내부에서 Flow를 안전하게 수집(collect)할 수 있으며, 값이 변경될 때 자동으로 UI가 갱신됩니다.또한, State로 변환.. 2025. 3. 20. [Android/Compose] Jetpack Compose를 통해 살펴보는 선언형 UI와 명령형 UI의 차이 Jetpack Compose를 공부하면서 "선언형 UI"라는 단어를 자주 접하게 되었습니다.Compose의 가장 큰 장점으로 꼽히는 선언형 UI가 기존의 명령형 UI와 어떤 차이가 있는지,그리고 왜 선언형 UI가 더 효율적인지에 대한 궁금증이 생겼습니다.이 글에서는 명령형 UI와 선언형 UI의 차이점,그리고 Jetpack Compose가 제공하는 선언형 UI의 장점에 대해 정리해보겠습니다.1. 명령형 UI와 선언형 UI란?UI를 구성하는 방법에는 크게 명령형 UI(Imperative UI)와 선언형 UI(Declarative UI) 두 가지 접근법이 있습니다.이 두 방식은 상태 관리와 UI 업데이트 방법에서 근본적인 차이를 보입니다.명령형 UI → 어떻게 그릴지를 개발자가 직접 명령선언형 UI → 무엇을.. 2025. 2. 25. [Android/Compose] LazyColumn vs RecyclerView 비교 : RecyclerView 없이 리스트 만들기 Jetpack Compose를 공부하면서 LazyColumn을 접하게 되었습니다.기존에는 리스트 성능을 최적화하려면 RecyclerView를 사용하고, 그때마다 Adapter와 ViewHolder를 직접 구현해야 했습니다.그런데 LazyColumn을 사용하면 코드가 훨씬 간결해지면서도 자동으로 성능이 최적화된다는 점이 신기했습니다.그래서 기존 RecyclerView와 비교하며 어떤 차이가 있는지 정리해보려고 합니다.1. 기존 RecyclerView의 동작 방식RecyclerView는 리스트의 성능을 최적화하기 위해다음과 같은 요소들을 개발자가 직접 구현해야 합니다.Adapter → 리스트 데이터를 표시하는 역할 ViewHolder → 뷰를 재사용하여 성능을 최적화 LayoutManager → 리스트의 배.. 2025. 2. 19. [Android/Compose] Recomposition: 상태 변화에 따른 UI 갱신 Jetpack Compose를 사용하면서 기존 방식과 다르게 LiveData.observe() 같은 코드도 없고, notifyDataSetChanged()를 호출하지 않았는데도 UI가 알아서 갱신되는 것이 신기하게 느껴졌습니다."LiveData도 사용하지 않았는데, 왜 상태가 변하면 UI가 자동으로 업데이트되지?"라는 궁금증이 들었습니다.기존 XML 기반의 View 시스템에서는 명시적인 호출이 필요했지만, Compose에서는 mutableStateOf만으로 UI가 알아서 갱신됩니다. 이는 Recomposition(재구성) 덕분입니다.이번 글에서는 공부한 내용을 바탕으로 Compose의 Recomposition이 무엇인지, 그리고 어떻게 동작하는지를 정리 해 보겠습니다.Recomposition이란?Reco.. 2025. 2. 6. [Android/Compose] Modifier를 파라미터로 전달하는 이유 Jetpack Compose에서 Column과 같은 레이아웃 컴포저블을 사용할 때, Modifier를 기본 인자로 직접 설정할 수 있습니다.그런데, 코드에서 Modifier를 바로 적용할 수 있는데도 불구하고, 굳이 파라미터로 Modifier를 전달하는 방식을 사용하는 이유가 궁금했습니다.이러한 의문을 가지고 공부하던 중, Compose의 재구성(Recomposition)과 성능 최적화와 관련된 중요한 개념을 알게 되었습니다.이 글에서는 왜 Modifier를 직접 선언하는 것이 아니라, 파라미터로 전달하는 것이 더 좋은 방법인지 정리해 보겠습니다.Modifier를 직접 사용하면 생기는 문제처음에는 아래처럼 Column 내부에서 바로 Modifier.padding(16.dp)을 적용하는 것이 자연스러워 보.. 2025. 2. 5. [Android/Compose] Spacer를 활용한 UI 요소 중앙 및 하단 배치 Compose를 이용해 화면을 구성하며, UI의 한 요소는 화면 중앙에 배치하고 다른 요소는 하단에 고정해야 하는 상황이 있었습니다.이 요구사항을 어떻게 해결할 지 고민하던 중, Spacer(modifier = Modifier.weight(1f))를 활용하여 원하는 대로 배치할 수 있었습니다.이 글에서는 해당 방법을 이용해 원하는 레이아웃을 구현한 과정을 정리해 보겠습니다.Spacer를 활용한 중앙 및 하단 배치구현 코드@Composablefun BusinessCardApp() { Column( modifier = Modifier.fillMaxSize(), // 전체 화면을 차지하도록 설정 horizontalAlignment = Alignment.CenterHorizonta.. 2025. 2. 4. 이전 1 다음 반응형