본문 바로가기

Mobile App64

[안드로이드] - ListAdapter ListAdapter 간단하게 설명하면 DiffUtil 유틸 클래스를 활용해서 아이템 업데이트를 할수 있는 기능을 추가한 Adapter 이다. AsyncListDiffer 를 더 쓰기 편하도록 랩핑한 클래스이다. RecyclerView.Adapter 가 ListAdapter 를 상속하게 하고, 초기화 시 DiffUtil 콜백 객체를 넘겨준다. submitList() 로 전체 데이터를 넘겨주면 adapter 가 백그라운드 스레드를 사용해 리스트 차이를 계산하여 화면을 갱신한다. 위 설명을 보면 왜 ListAdapter 가 RecyclerView 를 사용하는 것보다 효율적이라는 게 이해가 안될 수 있다. https://devnuts.tistory.com/205 [안드로이드] - DiffUtil 이란? (+A.. 2023. 2. 2.
[안드로이드] - DiffUtil 이란? (+AsyncListDiffer) 왜 DiffUtil 를 알아보는거야? 우리는 RecyclerView 를 사용할 때 RecyclerView.Adpater 에 notify 변경 메소드로 알려 아이템 변경을 감지하고 갱신할 수 있다는 것을 알고 있다. 보통 아이템 업데이트가 필요할 때, 아래의 메서드를 사용했다. public final void notifyDataSetChanged() { mObservable.notifyChanged(); } 전체 아이템을 다시 그리는 용도로 사용되는 메서드이다. 아이템 업데이트 과정에서 지연이 길어지면 UX에 영향을 미치기 때문에 가능한 적은 리소스와 함께 빠른 작업이 이루어져야 한다. 목록의 내용이 변경되면 notifyDataSetChanged()를 호출하여 아이템을 업데이트하지만 비용이 많이든다. 그래.. 2023. 2. 2.
[안드로이드] - 클린아키텍처 - 3 이전 편 2탄에서는 밥아저씨가 소개한 클린 아키텍처를 설명하였다. 이번에는 안드로이드 개발자는 어떤식으로 클린 아키텍처를 적용할 것인가? 에 대해서 블로그를 적어보려 한다. 모바일 클린 아키텍처 모바일 환경 자체의 특성에서 오는 문제가 있다. 자원의 한계, 라이프 사이클를 신경써야하는 부분 등 많은 문제가 있으나 가장 큰 문제가 되는 부분은 프리젠테이션 로직 복잡도다. 모바일 앱의 경우 뷰 상태가 매우 복잡하고, 비동기 처리가 많은 특성이 있다. 비동기 처리 없이 순차적인 시간 흐름으로 뷰 로직을 처리하는 것은 불가능한 경우가 많기 때문에 심플하게 코드 짜는 것이 쉽지 않다. 어느 순간 내가 짠 코드조차도 특정 이벤트에 대한 반응 로직이 어찌되어 있는지 코드를 보고 바로 이해하기가 힘든 경우가 흔히 생긴.. 2023. 2. 1.
[안드로이드] - 클린아키텍처 - 2 앞에 1탄에서는 아키텍처를 왜 배워야하는 지와 2탄에서 아키텍처는 무엇인지를 정리했다. 이제는 밥아저씨가 말한 클린 아키텍처가 무엇인지를 알아보고자 한다. 클린 아키텍처 지난 수년간 우리는 시스템 아키텍처와 관련된 여러 가지 아이디어를 봐왔다. 헥사고날 아키텍처 : https://mesh.dev/20210910-dev-notes-007-hexagonal-architecture/ 오니온 아키텍처 : https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/ 스크리밍 아키텍처 : https://blog.cleancoder.com/uncle-bob/2011/09/30/Screaming-Architecture.html DCI : https://en.wi.. 2023. 2. 1.
[안드로이드] - 클린아키텍처 - 1 이전 블로그에선 아키텍처를 왜 알아야할까? 에 대해 알아봤다면 이번 블로그 글에선 아키텍처가 무엇인지 좀 더 깊게 알아보자. 아키텍처 소프트웨어 아키텍처란? 시스템을 구축했던 사람들이 만들어낸 시스템의 형태이다. 💡시스템을 구축한 사람은 소프트웨어 아키텍트이다. 그 모양은 시스템을 1. 컴포넌트로 분할하는 방법. 2. 분할된 컴포넌트를 배치하는 방법, 3. 컴포넌트가 서로 의사소통하는 방식에 따라 정해진다. 그리고 그 형태는 아키텍처 안에 담긴 소프트웨어 시스템이 쉽개 개발, 배포, 운영 유지보수 되도록 만들어진다. 이 정의에 놀랐을 수도 있다. 아마도 소프트웨어 아키텍처의 목표가 시스템을 제대로 동작하도록 만드는 데 있다고 생각하고 있었을 것이다. 물론 우리는 시스템이 제대로 동작하기를 바라며, 시스템.. 2023. 1. 29.
[안드로이드] - 클린아키텍처 - 0 클린 아키텍처에 대해서 공부하기 이전에 왜 아키텍처를 공부해야 하는지 알아보자. 쓴이는 안드로이드 개발을 하면서 정말 다양한 디자인 패턴과 아키텍처를 접했다. MVC, MVP, MVVM, MVI 패턴 등등 또는 클린 아키텍처에 이르기까지 정말 다양하게 접했다. 블로그에서 트렌드라고 많이 나와있고 모르면 안된다는 생각에 그냥 사용법 익히면서 이런거구나 하고 넘어 갔었다. 섣부른 판단일 수 있겠지만 나와 같은 사람이 있을 것이다. 그래서 한 번 제대로 알아보려고 한다. 차근차근 정리해가며 알아가보자. 의문점 하나! Design 과 Architecture 는 무엇인가? 설계와 아키텍처 설계(design) : 특정 유형의 문제를 해결하는 방법으로 아키텍처보다는 좁은 개념이다. 아키텍처(architecture) .. 2023. 1. 27.
[안드로이드] - ShardPreferences, Datastore 차이 왜 Datastore 에 대해 알아보는 걸까? 우리는 안드로이드 개발을 하다보면, 간단한 데이터에 대해 로컬에 저장하여 사용한다. 가볍게 SharedPreferences 를 설명하자면 Key-Value 형태로 값을 저장하여 읽고 쓰는 간단한 방법이다. 데이터는 xml 파일로 로컬 저장소에 저장된다. 우리는 왜? Datastore 를 알아볼까 Datastore 는 Kotlin 코루틴 및 Flow 를 사용하여 비동기적이고 일관된 트랜잭션 방식으로 데이터를 저장한다. 그리고 Andorid Developer 사이트에서 Datastore 사용을 권장한다. 또한 SharedPreferences 를 사용하는데에 여러 문제점이 존재한다. 그래서 권장하는 것 같고, 이제는 SharedPreferences 에서 Datas.. 2023. 1. 27.
[안드로이드] - ConstraintLayout 을 왜쓸까? ConstraintLayout ? 2016년 Google IO 에 공개된 레이아웃 에디터에 상호연관 시키기 위해 도입된 Layout 이다. 'constraint' 라는 단어 의미대로 제약조건을 걸어 View 들을 배치하는 역할을 하는 Layout 이다. 정말 다양한 제약조건이 있다. 이 부분은 android developer 를 참고하여 자세히 알아보자. 왜 ConstraintLayout 을 사용하라고 할까? 뷰 Layout 작업을 할 때 컨스트레인트 레이아웃을 주로 사용하라는 다른 글을 많이 보았다. 퍼포먼스 측면에서 좋다는 글을 봐서 개발할 때 늘 그렇게 개발했다. 하지만 여기서 그 왜? 라는 의문을 갖고 글을 적어보려한다. 그 이전에 우리는 개발자로써 Layout 작업을 하기 이전에 Renderin.. 2023. 1. 26.