본문 바로가기

개발노트/Kotlin55

코틀린 코루틴 - 1장 코틀린이라는 개념은 '1963년'에 처음 제시되었다. 다만 코루틴이 현업에서 사용하게 된 것은 수십년 후 이다. 코루틴이라는 개념은 이전 유니티를 독학 할 당시에 잠깐 다뤄봤었다. 다만 오래 전의 이야기이기 때문에 스스로 개념을 잡기에는 무리가 있었다. 따라서 코틀린 코루틴 - 딥 다이브 책을 통해 코루틴에 대해 좀 더 이해해 나가고자 한다. 비동기 처리에는 여러가지 처리 방식이 있다. 코틀린 이전 언어들에서 비동기 처리를 하지 못하는 것은 아니며, 보수적으로 보았을 때 코틀린을 사용하는게 옳은가의 의문이 들기도 할 것이다. 나는 안드로이드 개발을 kotlin으로 시작하였으나, 서버 개발자들에게 좀 더 익숙한 안어는 java일 것이다. 그러나 요즘 근래에 와서는 spring 역시 kotlin에 눈을 돌리.. 2024. 3. 27.
파이널 프로잭트 4주차 2일 코루틴 1. 코루틴 스코프 싱크 맞추기 private fun deleteTemplate(item: TemplateEntity) { CoroutineScope(Dispatchers.IO).launch { if (!viewModel.cantDelete()) { viewModel.removeTemplate(item) val default = viewModel.getDefaultTemplate() withContext(Dispatchers.Main) { sharedViewModel.updateCurrentTemplateInCo(default) } }//canDelete }//CoroutineScope } suspend fun updateCurrentTemplateInCo(item: TemplateEntity?) { i.. 2023. 10. 31.
room db primarykey에 대해 룸 데이터 베이스를 쓰다보면 entitiy에 @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "entry_id") val id: Long = 0, 이런 식으로 autoGenerate를 해주는 경우가 있다. 이런 경우에 문제가 발생하는데, 바로 room db에서는 autoGenerate로 결정해준 넘버를 기준으로 알아서 재정렬을 해준다는 것이다. 즉 아무리 순서가 바뀐 데이터를 삽입해도 해당 primarykey값이 숫자로 되어있으면 얄짤없이 정렬을 해버리는 것이다. 그렇다면 어떻게 해야할까? 바로 Query문의 조정이 필요하다. @Entity(tableName = "tag_table") data class TagEntity( @PrimaryKey(autoGene.. 2023. 10. 30.
파이널 프로젝트 3주차 2일 swith map 1) livedata를 동적으로 바로바로 꽂아넣고 싶음 2) Transformations을 사용하면 가능함 3)현재 Transformations가 지원하지 않음 4)따라서 switch map을 사용함 sharedflow를 사용해보자 참고 사이트 https://stackoverflow.com/questions/75465435/unresolved-reference-transformations-after-upgrading-lifecycle-dependency Unresolved reference: Transformations after upgrading lifecycle dependency After upgrading the lifecycle dependency from 2.6.0-alpha04 to 2.6... 2023. 10. 24.
파이널 프로젝트 2주차 5일 Fragmentactivity navHostFragment navController Firebase 역직렬화 문제 모든 dataclass를 초기화하니 해결됨 https://charging.tistory.com/151 textwatcher onAttach와 onDetach 다시 한 번 sharedviewmodel 2023. 10. 20.
파이널 프로젝트 2주차 4일 1. 코루틴을 이용한 리턴 1) 뷰모델에서 suspend fun getAllTemplateSize(): Int = withContext(Dispatchers.IO) { val list = firebaseRepo.getAllTemplate(firebaseRepo.getUser()) list.size } 신기하게도 =withContext(Dispatchers.IO) 는 마지막 줄이 return을 해준다. =withContext()를 사용 2) 액티비티에서 CoroutineScope(Dispatchers.Main).launch { if (isFirstLogin()) { toMainActivity() } else { toTemplateActivity() } } private suspend fun isFirstL.. 2023. 10. 19.