Android/Basic (19) 썸네일형 리스트형 Moshi Converter 최신화: 2023.10.23 ‣ Intro: Moshi? 데이터를 다른 종점으로 전송하기 전, 통신이 가능하면서 나중에 재구성이 가능한 포맷으로 변환해줘야한다. 이런 포맷 변환을 직렬화라하며, 변환 포맷중 가장 많이 사용되는 것이 JSON이다. 반대로, 직렬화된 파일을 다시 객체 형태로 변환하는 과정을 역직렬화라 한다. Moshi는 Square에서 만든 라이브러리로, JSON과 객체 사이의 직렬화(Serialization) / 역직열화(Deserialization)를 쉽고 안전하게 작업할 수 있도록 서포팅하는 라이브러리로, 리플랙션과 Codegen 방식의 변환을 모두 지원한다. 또한, Gson이 가지는 일부 한계점과 문제점을 개선하려는 목적으로 만들어진 만큼, 다음과 같은 장점들을 가진다. 성능 Mosh.. [Android: Jetpack] LiveData & Observer Pattern 💬인프런 ‘냉동코더의 알기 쉬운 Modern Android Development 입문’을 수강하며 정리한 핵심내용과 별도로 공부를 진행하며 작성한 내용입니다.LiveData값의 변경을 감지할 수 있는 데이터 홀더이다.ViewModel과 결합할 때 시너지 효과[기존]UI에 표시할 데이터를 ViewModel에 저장한다.값이 변경되면 ViewModel의 데이터를 변경한다.Activity에서 ViewModel에 접근해서 변견된 값을 다시 화면에 표시한다.→ 별도의 생명주기를 가진 ViewModel을 사용해 액티비티 재생성 시에도 ui 값 유지 가능[LiveData사용 시]데이터 홀더로 LiveData를 사용값의 변경을 감지해서 UI에 자동으로 반영 가능해진다.→ 이것이 MVVM에서 구현해야 하는 ViewMode.. [Android: Jetpack] Architecture Pattern과 Android App Architecture 구글에서는 개발자들이 더욱 안전한 앱 개발을 할 수 있도록, 구글 아키텍쳐 앱 가이드를 제시한다.가이드에 따라서 만들어진 앱은 더 견고하고 고품질의 앱이 된다는데, 왜 그럴까? MVC 패턴이 1970년대 트리그베(Trygve Reenskaug)에 의해 최초로 도입된 후, 패턴에 대한 많은 변용과 발전이 있었다.이후 1990년대 Taligent가 MVC의 개선모델인 MVP 패턴을 도입하고, 비교적 최근, 2005년에는 John Gossman이 MVVM 패턴을 도입하게 된다. 이 패턴들을 도입하는 핵심적인 목적은 관심사를 분리함으로써, 프로그램을 더 안전하면서도 확장하기 쉽게 만드는 것이다.각 패턴은 위와 같은 구조를 가진다.그렇다면, 어떤 방식으로 관심사를 분리하고, 어떻게 프로그램이 안전해진다는 것일까?.. [Android: Jetpack] ViewModel & Lifecycle 기초(2) 앱이 강제 종료 될 경우 대비 바로 앱이 강제 종료 될 경우의 대비 방법을 알아보겠다. 여담으로, 메모리 부족 등의 이유로 시스템이 앱을 강제종료할 겨ㅇ우에는 뷰모델은 데이터를 유지할 수 없다. savedStateHandle 사용 이 방법은 앞전 글에도 설명했지만, RAM에 데이터를 저장하기 때문에 많은 데이터를 저장할 수는 없다. 하지만 시스템에 의한 강제종료에도 데이터를 유지할 수 있다. https://developer.android.com/topic/libraries/architecture/saving-states#onsaveinstancestate 이 방법은 거의 모든 코틀린 데이터 타입을 저장할 수 있다. 또, saveState에는 Key:Value 형태로 값을 저장한다.(Map이요) 자 그럼,.. [Android: Jetpack] ViewModel & Lifecycle 기초(1) ViewModel에 대해 정확히 알고 넘어가기 위해서는 먼저, Lifecycle에 대해 알아야한다. Activity의 생명주기는 예전에 정리해둔 자료를 보도록 하자. ViewModel을 사용하면 좋은 이유를 가장 와닿기 쉽게 떠올린다면, 화면을 회전시키는 상황을 떠올리면 된다. 화면을 회전하게 되면, 화면의 구성이 바꿔면서 그에 맞게 View를 재생성 해야한다. 파괴된 View를 다시 생성할 때, 액티비티가 보유 중이던 데이터가 사라지게 된다. 화면 전환 시, onDestroy()가 호출되고, 다시 onCreate가 실행되며 값이 초기화 되는 것이다. 이에 대한 해결 방법으로는 onSavedInstanceState가 있다. 이는 액티비티를 재생산 할 때 사라져버리는 휘발성 데이터를 메모리에 보존했다가 꺼.. [Android: Jetpack] 안드로이드 AAC(Android Architecture Components) 간략한 정리 어차피 글을 쓰는 현재가 이것들을 중점적으로 공부하는 시점이기 때문에, 한번 간략하게 정리해 놓고 세부적인 내용을 개별적으로 문서화 하려고 한다. AAC란? AAC(Aandroid Architecture Pattern)란 2017년 구글I/O에서 발표한 개발자의 편의를 돕기위한 6개의 라이브러리로 구성은 다음과 같다. Lifecycles(Easy handling lifecycles) LiveData(Lifecycle aware observable) ViewModel(Managing data in a lifecycle) Room(Object Mapping for SQLite) Paging(Gradually loading infomation) DataBinding Navigation WorkManager 이.. [Android: Jetpack] ViewBinding 기초 ✍🏼 ViewBinding의 필요성 기존에는 뷰의 요소를 불러오기 위해서 findViewById를 사용한다. kotlin-android-extensions를 사용하면 findViewById를 생략하고 간편하게 쓸 수 있다. 문제는 서로 다른 xml에서 id를 동일하게 사용할 수 있기 때문에, koltin-android-extensions를 통하면 코드가 꼬일 수 있다. 이에 대한 해결방안으로, 구글에서는 안드로이드 스튜디오 4.1부터 koltin-android-extentions의 지원을 중단하고 뷰 바인딩을 사용하도록 안내하고 있다. ✍🏼 ViewBinding이란? ViewBinding을 활성화하면 각 xml파일에 대해 ViewBinding클래스를 상속받는 개별 뷰 바인딩 클래스가 자동으로 생성된다. .. Fragment Lifecycle 예제 Fragment 소스파일은 진짜 별거 없어서 위의 Github링크로 대체한다. 생성-정지-파괴 순서로 모두 진행해보았다. 앱을 실행하자마자 위의 로그 스크린샷에서 보는 것 처럼, 액티비티의 onCreate()가 호출되었고, 이어서 프래그먼트의 onAttach()→onCreate()→onCreatView()→onViewCreate()→onViewStateRestore()→onStart()가 차례로 진행된다. 그런데 여기서 눈여겨 볼 점은 바로, 프래그먼트의 onStart() 호출 이후, 액티비티의 onStart()와 onResume()이 호출되며, 그 이후에 다시 프래그먼트의 onResume()이 호출된다는 것이다. 액티비티를 생성한 다음 프래그먼트를 진행하고, 액티비티를 Forground로 보낸 다음(실.. 이전 1 2 3 다음