본문 바로가기

Android

(21)
[Android] Custom Calendar Finut을 개발하면서 여러 종류의 캘린더를 만들어야 했다. 기존에 만든 Calendar는 단순히 RecyclerView를 활용했었는데, View가 재활용되지도 않고 성능도 별로 좋지 않아 의미가 없었다. Calendar UI가 새로 디자인 되어서 이번 기회에 새롭게 Custom 하였다. 해당 포스팅은 하단의 결과물과는 달리 스케줄을 표시하는 기능을 제외하고 기본적인 Calendar를 만드는 과정만 다루고 있습니다...!! 1️⃣ fragment_calendar.xml - linearlayout_days: 월화수목금토일을 나타내주는 레이아웃 - viewpager_calendar: 월별 날짜를 나타내주는 레이아웃 - linearlayout_days에는 동적으로 요일을 넣어주었다. - 추후에 요일을 나타내는..
MVI( Model - View - Intent ) 🛠 MVI Pattern 안드로이드 생태계에서는 대부분 MVVM을 Architecture Pattern으로 선정해왔다. MVVM을 이용하면 ViewModel은 View를 참조하지 않을뿐만 아니라, 각 컴포넌트들을 기능에 따라 분리시키며 관심사 분리에 따른 개발을 진행할 수 있다. 하지만 MVVM으로 프로덕트를 디벨롭하다보면 애플리케이션의 여러 상태를 제어하지 못해 일어나는 버그들이 많다. ✅상태문제 애플리케이션에는 무수한 상태들로 구성되어 있다. 비즈니스 로직에 따라 앱의 상태는 자주 변경되고 관리되며, 이에 따라 UI Rendering이 적절하게 이루어져야 한다. 하지만 앱이 커지고 기능이 많아질 수록 이러한 상태관리가 힘들어지고 의도한 방향으로 제어되지 않을 가능성이 매우 크다. MVI는 이러한 상태..
Architecture Patterns (MVC, MVP, MVVM) MVI에 대한 글을 작성하기에 앞서 여러 Architecture Pattern들에 대해 간단하게 정리. 1️⃣ MVC ( Model - View - Controller ) 웹 애플리케이션에서 가장 많이 쓰이는 아키텍처 패턴 중의 하나이다. ✅ Model: 애플리케이션에서 사용되는 데이터와 데이터를 처리하는 부분이며, 비즈니스 로직을 나타낸다. ✅ View: UI 컴포넌트로 사용자에게 보여지는 부분이다. ✅ Controller: 사용자의 Action을 입력받고 처리한다. 모델과 뷰 사이에서 협력자 역할을 한다. [장점] 여러 개의 뷰를 모델에 빌드할 수 있다. 변경사항이 모델 전체에 영향을 주지 않는다. 데이터를 어떠한 형태의 가공 없이 반환한다. [단점] View와 Model 사이의 의존성이 높아질 수 ..
[Jetpack Compose] State 보호되어 있는 글입니다.
Jetpack Compose로 마이그레이션하기 (1) 개발 스프린트를 마무리 하고 쉬엄쉬엄 재정비하는 시간을 가지면서 Jetpack Compose 로 마이그레이션해보고자 한다. 이전부터 매우 공부해보고 싶었는데 빠르게 개발 속도를 내야하다보니 어쩔 수 없이 익숙한 걸로 계속 개발하게 되었다... 조금 여유로울 때 많이 공부해놔야겠다. ✅ Jetpack Compose로 변경하는 이유 [선언형 UI] 기존의 xml로 뷰를 구성하는 방식은 명령형 UI에 해당한다. 데이터가 변경되면 UI에 접근하여 데이터가 변경되었으니 UI객체에 새로 업데이트 해라!라고 명령하는 방식이다. 이 과정에서 서로 잘못 연결되거나 누락되면 NPE등의 에러가 발생할 수 있다. 화면이 복잡해질 수록 이런 가능성이 높아진다. Jetpack Compose는 선언형 UI로 위와 같은 작업을 할 ..
[Android] Fragment간 데이터 공유(Navigation, SafeArgs) Fragment간에 데이터를 공유하는 몇 가지 방법에 대해 적어보고자 한다. 물론 틀린 부분이 있을 수도 있다💦 1. Bundle() fragment의 데이터 전달은 많은 사람들이 bundle을 사용해서 처리해왔다. 사용 방법은 다음과 같다. val testFragment = TestFragment() val bundle = Bundle() bundle.putString("id", et_id.text.toString()) testFragment.arguments = bundle parentFragmentManager.beginTransaction) .replace(R.id.fragment_container, testFragment()) .commit() //ReceiveFragment var restul..
[Android] Dependency kotlin 코드로 관리하기(buildSrc) build.gradle의 xml파일로 직접 설정해왔던 dependency들을 코드로 관리하는 방법을 쓰고자 한다. buildSrc 모듈을 만들어 관리하는 방법이다. 1. 프로젝트 루트에 buildSrc폴더를 생성한다. 2. buildSrc폴더 안에 build.gradle.kts파일을 생성하고 다음의 코드를 추가한다. plugins { `kotlin-dsl` } repositories { jcenter() } 3. buildSrc 폴더 안에 src - main -kotlin 폴더를 만들고 Kotlin파일(Versions)을 생성한다. 4. kotlin파일 안에 dependencies 버전을 입력한다. object Versions { const val kotlin_version = "1.4.3" const ..
[Android] Navigation Backstack Controll and Pass Data Navigation을 이용하면 어떻게 fragment에서 결과값을 받아올 수 있을까? NavBackStackEntry와 LiveData를 활용하면 fragment의 결과값 전달을 할 수 있다. NavBackStackEntry - 말 그대로 NavController의 BackStack으로 집입시켜주는 메서드이다. - 이를 통해서 SavedStateHandle에 접근할 수 있다. - SavedStateHandle은 viewModel의 상태를 저장해놓은 Saved State를 다루기 위한 객체이다. 그렇다면 navigation에는 backstack을 관리하기 위한 옵션들에 대해서 간단히 짚고 넘어가자 popUpTo는 주어진 도착점이 나올때까지 백스택을 팝업한다. popUpToInclusive 속성이 1) fa..