전체 글 327

Unresolved reference: copy

_uiState.update { state -> when (state) { is UiState.Success -> { UiState.Success( data = state.data.copy( newlyAddedId = event.addedId ) ) } else -> state }}이 코드에서 발생하는 오류는 UiState.Success의 data 필드가 UiData 타입이지만, copy 함수를 호출하려고 하고 있습니다. UiData는 인터페이스이므로 copy 함수가 없습니다. copy 함수는 코틀린의 data 클래스..

Incompatible types: UiState.Loading and State<UiState<UiData<Any>>>

Incompatible types: UiState.Loading and State>>  문제 발생 코드val uiState: State>> = viewModel.uiState.collectAsStateWithLifecycle()when (uiState) { is UiState.Loading -> { 원인과 해결 Incompatible types: UiState.Loading and State>> 오류는 uiState 변수의 타입이 State>>가 아니라 UiState.Loading이기 때문에 발생합니다. 1. uiState 변수의 타입을 State>>으로 변경합니다.val uiState: State>> = viewModel.uiState.collectAsStateWithLifecycle() 2. w..

인터페이스와 클래스의 독립 파일 여부

일반적으로, 관련된 클래스와 인터페이스는 같은 파일에 위치하는 것이 좋습니다. 그러나, 이들이 매우 크거나 복잡한 경우에는 각각 별도의 파일로 분리하는 것이 좋을 수 있습니다.  UiData, GroupsUiData, TagsUiData와 같은 클래스는 UI 상태를 나타내는 데이터 모델이므로, 이들은 일반적으로 UI 로직을 담당하는 파일에 위치합니다. 그러나 이들이 여러 곳에서 공유되는 경우에는 별도의 파일로 분리하여 재사용성을 높일 수 있습니다.  ClassificationUiState, GroupsUiState, TagsUiState와 같은 sealed 인터페이스는 각각의 UI 상태를 나타내므로, 이들은 각각의 UI 로직을 담당하는 파일에 위치하는 것이 일반적입니다.   따라서, 이러한 클래스와 인터..

우리식이 개인정보 처리 방침

1. 개인정보의 처리 목적 (‘http://comostudio.tistory.com/’이하 ‘코모스튜디오’) 은(는) 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다.- 알림 시 전화  수신 및 통화 중인지 여부를 알기 위함.2. 정보주체의 권리,의무 및 그 행사방법 이용자는 개인정보주체로서 다음과 같은 권리를 행사할 수 있습니다. 이용자 및 법정 대리인의 권리와 그 행사 방법① 정보주체는 (‘사이트URL’이하 ‘사이트명) 에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다.1. 개인정보 열람요구2. 오류 등이 있을 경우 정정 요구3. 삭제요구4. 처리정지 요구 정보를 전혀 수집 하지 않으므로,  모두 사용자가 직접 앱을 삭제 하..

식이 2024.05.20

[네이밍] 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()를 사용하는 것이 더 효율적.

반응형