본문 바로가기

Android

(9)
Fragment Result API * 공식문서 번역 Fragment 간 데이터 전달을 위해 viewModel을 사용하기도 하고, interface를 사용하기도 하고 여러 방법을 사용하는데 Activity Result 같이 Fragment Result도 있다고 한다.. 언제생겼지..! 어떤경우 사용하나 일회성 데이터를 fragment간, 혹은 fragment 와 host activity간 전달하고 싶을 때 사용한다. Fragment 1.3.0-alpha04 이후부터 FragmentManager는 FragmentResultOwner를 구현한다. (상속받아) 이것은 Fragment Manager가 fragment 결과의 central store로 동작할수 있다는것을 의미한다. 이제 component간 직접 참조 하지 않고, fragment의 ..
[Android] RecyclerView and DiffUtil Recycler view는 말 그대로 view를 재활용 한다는 측면에서 일반 ListView 보다 부하가 적고 효율적으로 동작한다는것을 알 수 있다! 그렇다면 어떤식으로 View를 재활용하는지 동작 원리를 알아보고, DiffUtil을 사용하여 쉽게 RecyclerView를 사용하는 방법을 알아보자! Recycler View의 동작 원리 알아보기 RecyclerView 주요 컴포넌트 4가지 RecyclerView.Adapter : RecyclerView에 각 itemView에 바인딩을 한다. adapter는 각 item-view의 위치를 연관된 data 위치에 연결 하는 방법을 알고 있다. RecyclerView.LayoutManager : RecyclerView내에 아이템을 배치, liner, grid ..
Firebase Cloud Messaging (FCM) - Android FCM은? 무료로 메시지 전송할 수 있는 메시징 솔루션 알림 메시지 또는 데이터 메시지 전송 단일기기, 기기그룹, 특정 주제를 구독한 기기등 3가지 방식으로 메시지 배포 가능 클라이언트 앱에서 채널을 통해 다시 서버로 메시지를 보낼 수 있다. 메시지 작성, 타겟킹 - gui 기반 콘솔에서 가능, sdk 등이용해서 서버환경에서 메시지 생성 가능 메시지 메타 데이터 생성 각다른 플렛폼별 기기로 메시지 라우팅, 필요한 경우 플랫폼별 처리 등 사용자 기기의 sdk 로 로직에 따라 메시지 처리 일반적인 상용앱 플로우 앱에서 토큰 취득 → 앱서버로 토큰 전송 → 앱서버에서 FCM 토큰을 이용하여 메시지 전송 요청 → FCM에서 메세지 전송 → 앱에서 메시지 수신 메세지 메시지 유형 2가지 알림메시지 FCM이 기기에..
Android 에서 MVC, MVP, MVVM 예제로 공부하기 오늘은 MVC, MVP, MVVM 패턴에 대하여 공부 및 정리 해보도록 하겠당! 우선 이 세가지 패턴의 주요한 목적은 모든 대부분의 소프트웨어 설계가 그러하듯 ‘관심사 분리(역할 분리)’이다. MVC (Model + View + Controller) Model : 데이터, 데이터 처리, 비지니스로직 (독립적 재사용가능) View: UI에 해당하는 부분 Controller: 사용자 입력을 받고 처리 View에 연결 시나리오 사용자 action controller로 들어옴 Controller는 action에 맞는 데이터 처리를 model에 요청 및 갱신 Controller는 model을 통새 View를 갱신 장.단 Model test용이 , 모델과 뷰 분리 용이 컨트롤로가 비대해지는 문제 있음 예시코드 Mo..
[Android] Room - Part of Android Jetpack 📍 developers https://developer.android.com/training/data-storage/room https://developer.android.com/training/data-storage/room/defining-data#search 이 글은 개인적인 공부를 위해 developers의 글을 직접읽고 번역하며 작성한 글입니다. 번역의 오류가 있을 가능성이 있습니다. 개인적인 첨언이 있을수있습니다 Room 을 이용하여 Local DataBase에 data 저장하기 사소하지 않은 구조화된 데이터를 처리하는 앱은 해당 데이터를 로컬에 유지하면서 많은 이점을 얻을 수 있다. 가장 일반적인 사용 사례로는 데이터 조각을 캐시하는것이다. 그래서 네트워크에 연결 불가능한 경우에도 여전히 사..
Clean Architecture - Android에 적용하기 실제로 프로젝트에서 적용하면서 체감은 했지만 막상 깔끔하게 정리해보지 못했던 클린 아키텍처 개념을 정리해보려고 한다! 여러 아키텍처들이 있지만 공통의 목표는 계층을 분리하여 의존성을 없애는 것이 라고 한다. 클린아키텍처도 계층을 나누어 관심사를 분리하는 것에 목적이 있다 . 3 Layer 클린 아키텍처에서는 크게 3가지 레이어로 분리하는데 Domain / Data / Presentation layer이다 그리고 의존성 규칙(Dependency Rule)을 지켜 계층을 분리한다 Dependency Rule은 원 내부의 (inner) 계층은 외부(outer)의 계층을 알수없고 모든 소스코드 의존성은 반드시 외부에서 내부로 고수준 정책을 향해야 한다는 것이다 (즉 원 내부에서 외부 모르고 외부는 내부를 알수 ..
Gson vs kotlinx-serialization Kotlin에서 Gson을 사용하다보면 느끼는 한계가 있다. 1. Not Null 한 변수에 null 값이 들어갈 수 있다는것 null check를 컴파일 타임에 하지 않아 런타임에 오류발생 가능성이 생김 kotlin의 null safety한 장점이 소용이 없어진다 2. default value 적용되지 않는 문제 통신데이터에 값이 없다던가 여타 이유로 데이터가 없는경우 기본값을 적용하고싶은 경우가 있다 하지만 gson을 사용하는 경우 converte 할 data class 의 프로퍼티에 default value 를 적용해두어도 막상 converte 하면 적용되지 않는 문제가 있다 즉 Gson이 kotlin의 장점을 최대화 할수있을만틈 kotlin에 친화적이지 않다는 결론이 났다 (두둥) 해결책으로는 k..
[Android] detekt 적용하기 정적 분석 툴을 검색하다보면 ktlint vs detekt 두가지를 비교하는 글이 많이 있다. 개인의 관점에 따라 선호하는 부분이 다르겠지만 굳이 차이점을 들자면 ktlint는 공식 가이드에 기반한 검사에 더 중점을 두고있고, detekt는 더 많은 옵션을 이용하여 구성할 수 있고 code quality를 높이는 가이드롤 기본으로 가지고 있다는것? 정도인것같다. 협업을 할때 공식적인 규칙 이외의 부가적인 규칙들이 많아진다면 생산성이 저하될수 있지만 또 코드 퀄리티에 있어서 장점이 있고, 각각 프로젝트의 특성에 맞게 적절한 사용을 하는것이 좋을것같다. 일단 둘다 적용을 하겠다 https://detekt.github.io/ https://detekt.github.io/ detekt.github.io 1. o..
[Android] ktlint 적용하기 프로젝트를 최초 생성하면서 ktlint를 적용해보려고 한다 ktlint는 kotlin 공식 codeing convention을 기준으로 code를 분석해주고, 올바르게 수정까지 도와주는 정적분석 도구이다. 여러가지 정적 분석 도구가 있는데 공식 style을 기본으로 제공하여 대세인듯 하여 ktlint를 먼저 적용해보겠다! 1. 공식홈페이지의 build.gradle 추가하기 https://ktlint.github.io/ 공식홈페이지에서 build.gradle 예시를 제공한다. 나의 경우 ktlint directory 를 생성하고 아래 gradle file을 생성했다. gradle file은 file을 생성하고 파일명을 명명할때 확장자를 gradle로 명기하면 생성된다. 2. 작성 gradle 1 2 3 4..