1. 기술 면접 연습
코루틴(Coroutine)은 무엇이고 어떻게 사용되나요?
코루틴(Coroutine)은 비동기 프로그래밍을 위한 코틀린의 핵심 기능 중 하나입니다. 코루틴은 경량 스레드라고 생각할 수 있으며, 비동기 코드를 더 쉽게 작성하고 관리할 수 있도록 해줍니다.
코루틴은 안드로이드 앱의 네트워크 호출, 파일 I/O, 데이터베이스 액세스 등과 같은 비동기 작업을 처리하는 데 특히 유용합니다. 사용자 인터페이스의 반응성을 향상시키기 위해 코루틴을 사용하여 UI 스레드를 차단하지 않고 백그라운드에서 작업을 수행할 수 있습니다.
2. 최종 프로젝트 6주차
드디어 최종 프로젝트의 마지막 주차이다.
이제는 기능 구현을 최종적으로 마무리하고, 여러 버그들을 잡아내서 완성시켜야 한다.
그런데 기능들을 추가하다보니 이곳저곳에서 예상치 못한 오류들이 툭툭 튀어나왔고, 오늘은 그런 오류들을 잡아내는 데에 하루를 썼다. (역시 디버깅이 제일 힘들다)
과연 어떤 오류들이 있었는지 알아보자.
자동 스크롤의 딜레이가 없는 오류
이게 뭔 소리냐면
원래라면 이렇게 일정 시간마다 자동 스크롤이 되게 해놨는데 이게 무슨 조화인지 어느 순간 자동 스크롤에 딜레이가 사라졌다.
5초가 지난 그 순간부터 이미지가 미친듯이 스크롤되기 시작한 것.
어디서 이런 오류가 생겼는지 이리 뜯고 저리 뜯어보다 드디어 하나 발견했다.
private fun setImageCallBack(sanlist: SanDetailDTO) {
val imageSize = sanlist.img.size
binding.vpMountain.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
// 이미지 사진이 1장일 때 자동 스크롤 방지
slideImageHandler.removeCallbacks(slideImageRunnable)
if (imageSize > 1) { slideImageHandler.postDelayed(slideImageRunnable, 5000) }
}
})
}
이게 원래 코드이다.
그런데 이 중에서 내가 뭔 짓을 했는지
if (imageSize > 1) { slideImageHandler.postDelayed(slideImageRunnable, 5000) }
else { slideImageHandler.removeCallbacks(slideImageRunnable) }
이렇게 바꿔놨더라.
그러니까, imageSize, 즉 이미지가 2개 이상일 때에는 이미지를 잠깐 멈추는 역할을 하는 removeCallbacks가 아예 먹히지 않아서 그렇게 됐다(고 추측하는 중이다. 사실, 저게 없어도 원래라면 postDelayed가 먹혀야 되는 게 아닌가 생각하지만)
아무튼 그래서 이걸 원상태로 복귀시켰더니 다시 원래대로 돌아왔다.
좋아요 한 산 리스트가 앱이 실행되는 동안 수정되지 않던 오류
그 다음으로는 이거다.
이건 또 뭐냐면, SharedPreference가 앱이 꺼지고 다시 실행해야 반영이 되고, 앱이 실행되는 도중에는 좋아요 버튼을 껐다 켜도 내정보에 반영이 되지 않는다.
이건 아무래도 구조적인 문제가 있다고 보고 우선은 MainActivity의 onRestart 부분과 Fragment의 onResume 부분에도 SharedPreference를 불러오도록 하니 우선은 해결되었다만 이러면 ViewModel의 LiveData를 쓰는 의미가 사라지므로 우선은 이렇게 임시조치를 하고 다시 수정이 필요하다.
좋아요 한 산 리스트의 이미지가 출력이 되지 않는 오류
현재 좋아요 한 산 리스트의 이미지는 ArrayList(String) 형태로 되어 있는 images 객체가 아닌, 단일 String 형태로 되어 있는 thumbnail 객체로 받아오는데 여기서 뭔가 문제가 있는 건지 특정 이미지가 출력이 되지 않는다. 이건 추후에 다시 보고나서 수정할 수 있으면 수정하기로 했다.
'[TIL][내일배움캠프]' 카테고리의 다른 글
[내일배움캠프][TIL] 24.03.28 (목) - 최종 프로젝트 6주차 : 최종 발표 준비 (0) | 2024.03.28 |
---|---|
[내일배움캠프][TIL] 24.03.22 (금) - 최종 프로젝트 5주차 : 추가 구현 (1) | 2024.03.22 |
[내일배움캠프][TIL] 24.03.21 (목) - 최종 프로젝트 5주차 : 추가 구현 (0) | 2024.03.21 |
[내일배움캠프][TIL] 24.03.20 (수) - 최종 프로젝트 5주차 : 추가 구현 (0) | 2024.03.20 |
[내일배움캠프][TIL] 24.03.19 (화) - 최종 프로젝트 5주차 : 추가 구현 (0) | 2024.03.19 |