[TIL][내일배움캠프]

[내일배움캠프][TIL] 24.03.18 (월) - 최종 프로젝트 5주차 : 추가 구현

kimlaurant 2024. 3. 18. 21:59
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가 무엇인가?

처음에 들었을 때는

이 아코디언인 줄 알고 뭔가 했는데

출처 : https://android-dev.tistory.com/59

이걸 말하는 거더라.

 

그러니까, 평소에는 안 보이다가 버튼을 누르면 자세한 내용이 촤르륵 펼쳐지는 UI를 아코디언 UI라고 부르더라.

 

 

이걸 어디에 쓰려고 하냐면

 

바로 여기.

 

지금도 5줄까지만 보여줘서 보기에는 깔끔해 보이지만, 아코디언 UI로 만들면 어떻겠냐는 피드백이 있어서 이 아코디언 UI에 한 번 도전을 해보려고 했다.

 

그런데 이것도 역시나 처음 접하는 기술이다보니 배우는 데에 한세월이었다.

그래서 이건 우선 내일 구현해보기로 했다.