[내일배움캠프][TIL] 24.03.18 (월) - 최종 프로젝트 5주차 : 추가 구현
1. 기술 면접 연습
오늘로써 최종 프로젝트도 5주차를 맞이했다.
이제 점차 추가 기능들을 구현하고, 안정화를 다지는 시기이다.
그리고 저번주부터 시작했던 기술 면접 연습을 오늘도 한 번 진행했다.
아, 각 주마다 가장 잘 쓴 기술 면접 답안을 올려주기도 했는데 그걸 면밀히 보고 참고하여 적어보았다.
lateinit 속성을 사용할 때 주의할 점은 무엇인가요?
lateinit은 초기화를 하기 전에 사용을 해서는 안 되며, 변수가 null이 될 수 있는 경우에는 사용해서는 안 됩니다. 또한, 초기화를 지연하기 때문에 초기화의 여부와 초기화되는 시점을 정확하게 파악하고 있어야 합니다.
2. 최종 프로젝트
오늘은 과연 어떤 기능을 추가했을까?
이미지가 1개일 때 자동 스크롤 막기
SanDetailActivity에서는 산 이미지들을 일정 시간마다 하나씩 자동적으로 스크롤되는 기능을 구현했다.
그런데 이게 처음에는 별 오류가 없었는데 갑자기 DB를 늘리다보니 문제가 생겼다.
DB를 추가하는 과정에서 미처 이미지들을 다 구하지 못 한 산들은 임시 이미지를 하나씩만 넣어두었는데 이 이미지 하나씩만 넣은 산들은 자동 스크롤을 지정한 시간 이후가 되면 앱이 비정상적으로 종료가 되었다.
오류를 찾아보니 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 가 나오는데 역시 이미지가 1개인데 자동 스크롤을 실행하려다보니 생기는 문제여서 그런 듯했다.
그러니 이를 막으려면 추가적으로 장치를 마련해야 했다.
private fun setImageCallBack(sanlist: SanDetailDTO) {
val imageSize = sanlist.img.size
binding.vpMountain.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
slideImageHandler.removeCallbacks(slideImageRunnable)
// 이미지 사진이 1장일 때 자동 스크롤 방지
if (imageSize > 2) slideImageHandler.postDelayed(slideImageRunnable, 5000)
}
})
}
본래 자동 스크롤을 하는 부분에서 조건 1가지만 추가해서 image의 개수가 특정 수 이상일 때만 자동 스크롤을 할 수 있도록 만들었다.
다만, 이상한 점은 원래는 1개일 때만 안 되게 하려고 imageSize > 1을 넣었는데 이 때에도 위와 똑같은 오류가 뜨더라.
왜 그럴까?
아코디언 UI
이 다음으로는 아코디언 UI를 찾아보았다.
여기서 잠깐, 아코디언 UI가 무엇인가?
처음에 들었을 때는
이 아코디언인 줄 알고 뭔가 했는데
이걸 말하는 거더라.
그러니까, 평소에는 안 보이다가 버튼을 누르면 자세한 내용이 촤르륵 펼쳐지는 UI를 아코디언 UI라고 부르더라.
이걸 어디에 쓰려고 하냐면
바로 여기.
지금도 5줄까지만 보여줘서 보기에는 깔끔해 보이지만, 아코디언 UI로 만들면 어떻겠냐는 피드백이 있어서 이 아코디언 UI에 한 번 도전을 해보려고 했다.
그런데 이것도 역시나 처음 접하는 기술이다보니 배우는 데에 한세월이었다.
그래서 이건 우선 내일 구현해보기로 했다.