Android & Kotlin
-
AndroidStudio/IntelliJ IDE 에서 변수 추적이 안되는 케이스 분석Android & Kotlin 2025. 8. 8. 13:58
0. 개요IntelliJ IDE 에서 자동 변수추적(find usage) 이 작동하지 않는 케이스를 분석하고 해결방안을 정리합니다.해당 글은 Kotlin 기반 프로젝트 이슈를 다룹니다.1. 데이터 클래스 변수의 사용처 추적 이슈1-1. 문제 상황데이터 클래스의 변수를 IDE에서 추적하여 사용처를 확인하려 했으나, 실제로는 사용되고 있음에도 사용처가 표시되지 않는 문제 발생1-2. 원인 분석함수 파라미터의 자동 할당(named parameter)을 사용할 경우, IDE가 변수 할당 위치를 제대로 인식하지 못함인식 가능한 경우: 명시적으로 파라미터명을 표기한 경우MainActivity.start(this, MainParams(url, someParam = isSomeParam)) 인식 불가능한 경우: 자동 ..
-
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..