본문 바로가기

[TIL][내일배움캠프]

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

1. 기술 면접 연습

 

람다 표현식(Lambda Expression)은 무엇이고 어떻게 사용되나요?

 

람다 표현식(Lambda Expression)은 간결하게 함수를 선언하고 전달하는 방법을 제공하는 함수형 프로그래밍 언어의 특징 중 하나를 말합니다. Kotlin에서 사용할 때는 보통 매개변수 it을 사용하는 경우가 많으며, it을 특정할 수 있는 변수가 반드시 있어야 하지만 딱 하나만 지정할 수 있습니다.

 

 

2. 최종 프로젝트 5주차

 

좋아요 기능

 

좋아요 기능은 한 번 시작하면 오랫동안 진득하게 붙잡아야 할 것 같아서 일단 다른 부차적인 기능부터 먼저 구현하느라 약간 뒤로 미뤄진 경향이 없잖아 있었지만, 이제는 더 이상 놔둘 수가 없었기 때문에 다시 한 번 잡았다.

 

그런데 여기서 예기치 못 한 오류가 발생했다.

 

바로 좋아요 버튼이 눌러지지 않는 것.

 

더 웃긴 건 Appbar Layout이 펼쳐진 상태에서는 안 되는데, 완전히 접힌 상태에서는 잘 눌러진다는 것.

 

이건 또 처음 겪는 경우여서 왜 이런 오류가 생겼는지 아무리 찾아봐도 내 머리에서는 한계가 있었다.

 

그래서 약간의 도움을 받았는데 정말 생각지도 못 한 이유 때문이었다.

 

레이아웃에는 x, y 외에도 z축이 있어서 레이아웃이 겹친 경우에는 위에 덮인 레이아웃이 있으면 아래에 있는 레이아웃이 먹힌다고 한다.

 

그런데 현재 NestedScrollView가 좋아요 버튼이 있는 레이아웃을 덮은 상태였던 것

 

그래서 NestedScrollView의 margin을 조절해봤더니 그제서야 어떤 위치에서든 정상적으로 작동이 되었다.

 

 

이제 이 예상치도 못한 오류는 해결했으니 다음 SharedPreferences를 적용시켜보기로 했다.

 

여기서 몇 가지 방법들이 있었는데

 

i) ViewModel에 LivaData로 저장하기

ii) SharedPreferences로 저장하기

 

여기서 SharedPreferences로 저장하는 방법을 택한 이유는 딱 하나였다.

 

ViewModel은 Activity가 종료되면 자동적으로 닫히기 때문.

 

현재 이 앱의 구조가 MainActivity 안에 있는 Fragment에서 산을 클릭하면 DetailActivity로 이동하는 터라, 이 DetailActivity에 있는 좋아요 버튼을 눌러서 LiveData에 저장시켜도 뒤로가기 버튼을 누르면 DetailActivity가 멈추기 때문에 도로 LiveData가 초기화 된다는 것.

 

그래서 SharedPreference로 저장하는 방법을 택했다.

 

그런데 여기서 내가 생각지도 못 한 부분이 하나 있었다.

 

SharedPreference에 List로 받와아야 하는 이유를.

 

처음에 리팩토링을 할 때, 산 이름만 저장하는 방식으로 코드를 리팩토링 했는데 이렇게 하니 앱을 종료하면 좋아요를 찍은 산의 북마크가 초기화되버리더라. 정작 리스트는 저장되어 있는데 말이지.

 

그렇다고 List로 받아오려고 하자니 SharedPreference는 String, Long과 같은 자료형과 Set만 저장할 수 있어서 List로 저장하려면 다른 방법을 사용해야만 했다.

 

아우 골아프다.