Android & Kotlin
-
Serialization 라이브러리 마이그레이션 과정(Gson -> Kotlinx-Serialization)Android & Kotlin 2023. 12. 23. 11:42
개요위 글에서는 Gson 에서 Kotlinx-Serialization 으로 의 마이그에션 도중 겪은 문제 및 그 과정에서 얻게된 정보들을 정리합니다.마이그레이션 배경에 대해서는 이전 글을 참고해주세요 📌 마이그레이션 순서라이브러리 선언 (각 모듈 별로 선언해야함)모델 변경 (어노테이션 수정), Adapter (Serializer) 정의retrofit converter 정의 및 추가통신 이외 부분에서도 Gson 걷어내기 (optional)(크게는 위 순서대로 진행했지만 마이그레이션을 실제로 진행하다보면 부분부분이 물려있어 왔다갔다하며 수정이 필요하다.) 1. 라이브러리 선언- serialization 라이브러리 선언- retrofit converter 추가 (왓슨형 감사합니다 ㅜㅜ)- 모듈화가 되어 ..
-
직렬화 라이브러리 마이그레이션 이유(Gson 에서 Kotlinx-Serialization)Android & Kotlin 2023. 12. 22. 00:12
📌 마이그레이션 배경 Gson 은 Kotlin 의 Null-Safety 를 완전히 지원하지 못한다 Backend 로 부터 약속에서 어긋난 응답을 받는 경우가 존재한다(None-Null type 필드가 Null로) Backend 와 약속된 응답 형태에 근거하여 응답값의 Nullable 을 판단해왔었지만, 간혹 약속되지 않은 Null 을 전달해줄 때가 있었다. 이때Gson 은 None-Null 로 정의 된 필드에 대해서 Null 값이 들어 올 경우 해당 객체에 Null을 주입한다. 그리고 이 필드가 사용되는 시점(정확한 시점으로 규정할 수 없음)에 에러를 발생시킨다. 시점을 규정할 수 없는 탓에 예외처리도 당연히 불가하며 이는 곧 앱 크래시로 이어질 수 있는 위함한 결과를 초래할 수 있다. [ 마이그레인션 ..
-
Hilt 관련 리펙토링 기록 (@binds @Provides 차이 , UsecaseModule)Android & Kotlin 2023. 1. 8. 15:39
구조설명 (클린 아키텍처) 1. 클린아키텍처 구조에서 Hilt 를 통해 의존성 주입을 사용하고 있었다. 2. 이때 Repository (Interface) 의 주입을 위해 RepoisotyModule 을 만들어 사용했고 @Provides 를 사용해왔었다. 3. 그리고 Usecase 에서 Ropository 와 ErrorHandler 에 의존했고 이에 따라 각각 UsecaseModule, NetowrkModule 을 정의해주어 사용했다. class GetSomeUseCase( private val repository: Repository, private val errorHandler: ErrorHandler ) : BaseUseCase() {...} @ErrorHandler @Provides @Single..
-
DialogFragment 오류 정리 (Radius , 크기 지정)Android & Kotlin 2022. 11. 28. 17:53
Dialog Framgnet 모서리 둥글게 (radius 설정) 문제상황 cardView 로서 radius 를 주던 drawable 에서 배경을 정의해서 적용하던 적용이 되지 않음 해결 방법 아래와 같이 정의 된 style 을 적용 or 코드로서 windowBackground, windowNoTitle 부분을 설정 //style.xml class Popup : DialogFragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setStyle(STYLE_NO_TITLE, R.style.popupStyle) } ... } Dialog Fragment 크기 조절 하기 문제상황 dialo..
-
By 키워드를 이용한 Shared PreferenceAndroid & Kotlin 2022. 11. 18. 18:44
1. SharedPreferences 기본 사용법 val sharedPref = getSharedPreferences("name", Context.MODE_PRIVATE) with (sharedPref.edit()) { putString("key", "value") apply } 2. By 키워드를 통한 SharedPreferences 사용법 장점 값에 대한 접근, 수정이 매우 편함 (변수처럼 취급할 수 있음) 매번 getter, setter 를 구현해줄 필요가 없음 SharedPreference 를 객체를 생성하거나 가져오지 않아도 됨 구현 방법 1. ReadWriteProperty 를 구현한 Preference class 를 정의한다 //PreferenceProperty.kt class StringP..
-
Android 13 알아보기 (Target SDK 33 으로 변경)Android & Kotlin 2022. 11. 11. 19:02
목적 target sdk 를 33으로 올림에 있어 꼭 알아야할 부분에 대해 정리해보자 개발 환경 구성 안드로이드 스튜디오 업데이트 SDK 설치 Tools > SDK Manager > SDK Platforms → Android API 33 다운로드 Tools > SDK Manager > SDK Tools → Android SDK Build-Tools 33 다운로드 Android 13 Emulator 세팅 알림 런타임 권한 Android 13 미만 앱 설치시 Notification 을 띄울 수 있었음 Notification 권한을 갖는 것이 기본 Android 13 이후 runtime permission 을 받아야만 notification 을 띄울 수 있음 Notification 권한이 없는 것이 기본 PO..
-
[ Android ] Context 와 메모리 릭Android & Kotlin 2022. 7. 27. 14:28
📌 주요 기능 어플리케이션에 관하여 시스템이 관리하고 있는 정보에 접근 리소스, db, preference 접근 : getResourece() … package 위치 인식 : getPackageName() 안드로이드 시스템 서비스에서 제공하는 API 호출하기 엑티비티 및 서비스 실행 : startAcitivity(), startService() 시스템 서비스 접근 : getSystemService 안드로이드가 제공하는 시스템-레벨 서비스의 메너저 객체를 반환 받을 수 있다. 📌 Context 의 종류와 사용시 주의점 Context 의 종류 📍 Application Context 싱글턴 인스턴스 getApplicationContext 를 통해 접근가능 Application 라이프사이클에 의존함 📍 Base..
-
[ Android ] CallAdapter, SealedClass 를 활용한 레트로핏 응답 처리Android & Kotlin 2022. 7. 12. 01:28
📌 문제상황 레트로핏을 통한 통신시 결과 값에 대해 처리에 대한 고민이 생겼습니다.. 1. 서버로 부터 실패의 응답이 오는 경우 2. 서버로부터 잘못된 형태의 응답이 오는 경우 3. 응답 형태이긴 하지만 빈값인 경우 등등 응답에는 다양한 문제가 있을 수 있고 이를 관리할 수 있는 무언가가 필요하다는 생각을 했습니다. 응답에 대한 검증을 어디서 어떻게 할지 또한 고민이었습니다. 📌 해결 방법 1 : Network Reuslt Class (Seald Class) 첫번째 방법은 SealdClass 로 응답을 감쌈으로써 응답의 형태를 일관성 있게 추상화 하는 것입니다. sealed class NetworkResult { class Success(val data: T) : NetworkResult() class ..