[안드로이드 공부] 210

[네이밍] Edited Vs Modified

함수, 변수, 상수 등 이름 작성 시 적절한 네이밍 고민 "Edited to"와 "Modified to" 둘 다 코드에서 문자열을 변경하는 데 사용할 수 있습니다. 그러나 이 두 표현은 약간 다른 의미를 가집니다.   "Edited to"는 일반적으로 내용이 편집되었음을 나타내며, 이는 내용의 일부가 변경되었거나 추가되었음을 의미합니다.   반면에 "Modified to"는 일반적으로 원래의 내용이 어떻게든 변경되었음을 나타냅니다. 이는 내용의 일부가 변경되었거나 전체 내용이 완전히 변경되었음을 의미할 수 있습니다.   따라서, 어떤 표현을 사용할지는 해당 문자열이 어떤 상황에서 사용되는지에 따라 달라집니다. 그룹의 이름이 완전히 변경되었다면 "Modified to"가 더 적절할 수 있습니다. 그러나 그..

Manifest merger failed - tools:replace

안드로이드 스튜디오 빌드 시 다음과 같은 에러 발생.Manifest merger failed : Attribute property#android.adservices.AD_SERVICES_CONFIG@resource value=(@xml/gma_ad_services_config) from [com.google.android.gms:play-services-ads-lite:23.0.0] AndroidManifest.xml:92:13-59 is also present at [com.google.android.gms:play-services-measurement-api:21.6.2] AndroidManifest.xml:32:13-58 value=(@xml/ga_ad_services_config). 친절하..

Group(selectedGroupId = null Vs -1)

selectedGroupId 변수는 현재 선택된 그룹을 나타내는데 사용됩니다. 이 변수의 값이 null인 경우 선택된 그룹이 없음을 나타내는 것이 일반적입니다.-1을 사용하는 것은 특정한 상황에서 유효한 그룹 ID가 없음을 나타내는 방법일 수 있지만, 이는 코드를 읽는 사람에게 혼란을 줄 수 있습니다.   따라서, null을 사용하여 "선택된 그룹이 없음"을 나타내는 것이 더 명확하고 일반적인 방법입니다. 이렇게 하면 selectedGroupId 변수의 타입을 nullable Group?으로 선언할 수 있으며, 이 변수가 null인지 아닌지를 확인함으로써 선택된 그룹의 존재 여부를 쉽게 판단할 수 있습니다.

Kotlin by VS .value collectAsStateWithLifecycle

val groupsUiState by viewModel.groupsUiState.collectAsStateWithLifecycle() val groupsUiState = viewModel.groupsUiState.collectAsStateWithLifecycle().value 두 코드는 Kotlin의 by 키워드를 사용하는 방식과 직접 .value를 호출하는 방식의 차이를 보여줍니다.   val groupsUiState by viewModel.groupsUiState.collectAsStateWithLifecycle() 이 코드는 Kotlin의 위임 프로퍼티(delegated property)를 사용합니다. by 키워드를 사용하면 groupsUiState의 값은 viewModel.groupsUiState..

MutableStateFlow .update VS .value = 차이점

private val _uiState = MutableStateFlow(UiState.Loading)_uiState.update { when (state) {VS_uiState.value = state 두 방법 모두 MutableStateFlow의 값을 업데이트하는 방법이지만, 사용 상황에 따라 적합한 방법이 다르다._uiState.update { }: 이 방법은 현재 MutableStateFlow의 값에 기반하여 새 값을 계산할 때 유용하다. 이 함수는 현재 값을 인자로 받는 람다 함수를 사용하며, 람다 함수의 반환 값이 새로운 값으로 설정됨.  _uiState.value = state: 이 방법은 새 값이 현재 값에 의존하지 않을 때 사용한다. 이 방법은 단순히 MutableStateFlow의 ..

listOf()와 emptyList() 차이

listOf()와 emptyList() 모두 코틀린에서 빈 리스트를 생성하는 함수. listOf()는 가변 인자를 받아서 리스트를 생성하는 함수다. 인자 없이 호출하면 빈 리스트를 반환한다.  emptyList()는 항상 빈 리스트를 생성하는 함수로 listOf()와 emptyList()는 인자 없이 호출할 경우 동일한 결과, 즉 빈 리스트를 반환함. 그러나 이 두 함수 사이에는 성능 차이가 있다. emptyList()는 항상 같은 인스턴스를 반환하기 때문에 새로운 객체를 생성하지 않음. 반면에 listOf()는 호출할 때마다 새로운 리스트를 생성함.  따라서 빈 리스트를 생성할 때는 emptyList()를 사용하는 것이 더 효율적.

Missing type, Progard, Generic 문제

java.lang.RuntimeException: Missing type parameter. at cohttp://m.google.gson.reflect.TypeToken.getSuperclassTypeParameter(Unknown Source:26) at cohttp://m.google.gson.reflect.TypeToken.(SourceFile:1) at U2.e$a.(SourceFile:1) at U2.e.a(SourceFile:8) 1. 위와 같은 문제 발생시 위치를 알기 어렵다. --> Release, Debug 모두 확인 시 Release 에서만 발생 확인 2. Release 에서만 발생 --> 의심; minify, progard --> 소스를 제대로 읽지 못해 발생 할 수 있으므로 2. ..

Caused by: java.lang.IllegalArgumentException: MaterialThemeUsingMdcTheme requires the host context's theme to extend Theme.MaterialComponents

Caused by: java.lang.IllegalArgumentException: MaterialThemeUsingMdcTheme requires the host context's theme to extend Theme.MaterialComponents at com.google.android.material.composethemeadapter.MdcTheme.createMdcTheme(MdcTheme.kt:134) at com.google.android.material.composethemeadapter.MdcTheme.createMdcTheme$default(MdcTheme.kt:125) at com.google.android.material.composethemeadapter.MdcTheme.Mdc..