일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코루틴 공식문서
- power menu
- Kotlin Serialization
- Coroutine
- Android Compose
- power menu 라이브러리
- 코루틴
- 안드로이드 무한 스크롤
- Sticky Header RecyclerView
- 힐트
- viewmodel
- 스레드 vs 코루틴
- BOJ
- runCatching
- AAC ViewModel
- android compose orbit
- Thread vs Coroutine
- Hilt 에러
- Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException
- Android Custom View
- 안드로이드 컴포즈
- Android Compose Navigation
- 안드로이드 커스텀 뷰
- 코루틴 공식 문서
- 백준 2615
- 코틀린 에러 핸들링
- 백준
- RecyclerView Sticky Header
- hilt
- android orbit
- Today
- Total
목록Android (32)
Beeeam
https://velog.io/@beeeam/Android-MVI-Pattern-without-Orbit
최근에 Coordinator Layout으로 구현된 화면 내부의 RecyclerView의 무한 스크롤을 구현하는 작업을 했습니다. RecyclerView의 최하단에 도달하면 새로운 아이템을 받아와서 추가하여 화면에 보여주는 동작을 구현해야 하는데 새로운 아이템을 화면에 보여주면 기존의 아이템들이 사라지는 문제에 직면했습니다. 이를 Coordinator Layout 때문이라는 생각을 하였고 해결하기 위해서 화면 전체를 하나의 RecyclerView로 구현한다는 생각을 했습니다. 이 과정에서 App Bar 동작도 구현을 해야 했는데 이는 Sticky Header로 구현하면 될 것이라 생각하여 Sticky Header를 구현한 RecyclerView를 구현하게 되었습니다. Sticky Header는 Compo..
이전에 진행했던 프로젝트에서 클린 아키텍처를 기반으로 Data, Domain, Presentation으로 모듈을 나눠서 프로젝트를 설계했던 경험이 있습니다. 하지만 Presentation 모듈이 타 모듈들에 비해 비대해지는 문제점을 찾았고 이를 해결하기 위해서 Presentation 모듈을 하위 모듈들로 나눠야겠다는 생각을 하게 되었습니다. 그래서 기능별로 모듈을 생성하고 작업하던 중 Navigation을 어떻게 구현해야 할 지에 대한 문제에 직면하게 되었습니다. 이 글에서는 이런 문제를 해결한 방법에 대해서 글을 써보자 합니다. 문제 기능별로 모듈을 나누면서 모듈마다 내부의 컴포넌트들에 대한 navgation graph를 가지게 설계하였습니다. 이 때문에 여러 개의 navigation graph를 체계..
MVVM 패턴은 MVP 패턴에서의 Presenter 대신에 ViewModel을 사용하는 차이를 가집니다. 근데 안드로이드 권장 아키텍처에도 ViewModel이 존재합니다. 그래서 이 둘이 같은 개념인지에 대해서 공부하고 정리하고자 합니다. MVVM ViewModel MVVM 패턴은 비즈니스 로직과 프리젠테이션 로직을 UI에서 완전히 구분하는 것을 목표로 하는 디자인 패턴입니다. Model, View, ViewModel로 구성되며 ViewModel은 Model과 View의 연결 다리가 되어 비즈니스 로직과 프리젠테이션 로직을 분리하도록 합니다. View는 ViewModel을 알지만 ViewModel은 View를 모르고, ViewModel은 Model을 알지만 Model은 ViewModel을 모릅니다. 그래..

최근에 진행한 프로젝트는 Jetpack Compose 를 사용하여 진행했는데 여태까지 사용했던 방식에 비해서 큰 장점을 가지고 있는 것을 느꼈습니다. 그래서 공부하던 중 이전의 방식과 비교를 하여 각 방식의 장단점을 알아보고 추가로 Compose 맛보기를 하려고 합니다. 안드로이드 개발을 할 때 이전까지는 UI를 xml 파일에 만들고 동작을 Activity나 Fragment에 정의하였습니다. 이러한 방식을 명령형 UI 라고 합니다. 그리고 Jetpack Compose는 선언형 UI 라고 합니다. 이 둘의 차이점을 알려면 먼저 명령형 프로그래밍과 선언형 프로그래밍의 차이를 알아야 합니다. 명령형 프로그래밍 명령형 프로그래밍을 위키백과에서는 다음과 같이 설명하고 있습니다. 선언형 프로그래밍과 반대되는 개념으..
이번에 Jetpack Compose를 이용한 프로젝트를 진행하면서 MVI 패턴을 처음 사용하였다. 이전의 프로젝트에서는 MVVM 패턴을 적용했었기 때문에 신세계였다. MVVM 패턴을 사용할 때는 뷰가 데이터를 관찰하는 것에 신경을 많이 썼었는데 MVI 패턴을 사용하면서 상태관리 부분에 많이 신경을 썼다. MVI 패턴에 대해서 자세히 알아보지 않고 프로젝트를 진행했었기 때문에 많이 헤멨었는데 이번 기회에 제대로 공부해서 정리하는 게 좋겠다는 생각을 하여 정리해본다. Why MVI? 안드로이드 앱은 상태의 집합이라고 볼 수 있다. 작은 화면에서도 여러 상태가 존재한다. 위의 화면에는 여러 상태가 존재한다. 광고 배너 보여줌 유무 각 아이템 클릭 여부 로딩 바 보여줌 유무 스크롤 상태 대충 생각나는건 이 만큼..

ListView 리스트를 보여주는 뷰들은 자주 사용되는데 이는 Column, Row 또는 LazyColumn, LazyRow를 사용해서 구현할 수 있다. Column이나 Row만 사용해도 리스트를 보여줄 수 있는데 왜 LazyColumn이나 LazyRow를 사용하는걸까? Normal vs Lazy 1. 뷰가 초기화될 때 차이 Column이나 Row는 초기화될 때 화면에 보여지는 아이템 개수에 상관없이 리스트의 모든 아이템을 만든다. 하지만 LazyColumn, LazyRow는 화면에 보여지는 아이템의 개수 만큼의 아이템들을 만들게 된다. 그리고 스크롤해서 표시 영역에서 벗어나게 되면 아이템을 파괴하고 새로운 아이템을 만든다. 이러한 이유때문에 리스트의 개수가 적으면 Column, Row를 사용하고 리스트..

Jetpack Navigation을 통해서 안드로이드 앱에서의 화면 이동을 쉽게 구현할 수 있다. Jetpack Navigation은 스택구조의 내비게이션 스택을 사용하여 사용자의 경로를 추적한다. 사용자가 현재 위치한 화면들은 내비게이션 스택에 쌓였다가 사용자가 뒤로가는 동작을 실행하면 위에서부터 하나씩 빼는 방식이다. 프로젝트에 내비게이션을 추가하려면 먼저 NavHostController 인스턴스를 만들어야 한다. 얘가 내비게이션 스택을 관리하고 현재 위치를 추적한다. val navController = rememberNavController() 이렇게 만든 내비게이션 컨트롤러는 NavHost 인스턴스에 할당해야 한다. NavHost는 사용자가 이동할 화면의 플레이스홀더 역할을 한다. NavHost(..