wafflestudio / seminar-2020

2020 Rookies 세미나
28 stars 49 forks source link

[안드로이드 과제2] BindingUtils.kt에 대해 잘 이해하지 못하겠습니다. #164

Open shovelingpig opened 4 years ago

shovelingpig commented 4 years ago

BindingUtils.kt 파일 관련

MVVM 패턴의 개념과 LiveData, DataBinding 등에 대해 어느정도 기초적인 이해는 하였으나, BindingUtils.kt라는 파일은 어째서 존재하는 것이며 대체 어디서 호출하는 것인지 모르겠습니다. 구글링을 통해 관련 지식들을 알아보았으나, 제가 지금까지 알아낸 사실은 이것이 데이터바이딩 라이브러리에서 사용하는 함수들을 모아놓은 파일이라는 것(?) 정도만 확인할 수 있었습니다. 혹시 BindingUtils.kt 파일의 역할과 호출 맥락에 관한 레퍼런스가 있으시다면 정말 감사드리겠습니다.

과제2 관련

mc

과제2 코드를 처음 구현하고 실행해보았을 때, BindingUtils.kt의 bindItem 함수의 todo인자가 Non-Null이여야 하는데 Null이 들어왔다는 에러가 발생하였습니다. 그리하여 이 함수의 todo 인자를 null이 가능하게 임시로 바꾸고 실제 기기에서 테스트해 보았도니 앱의 모든 명세는 정상적으로 작동이 됩니다. 다만 bindItem 함수가 어떤 맥락에서 어떤 객체에 의해 호출되었는지 또 왜 todo의 인자로 null이 왔는지 알기 못하기 때문에, 저는 제가 완전히 잘못 구현했는데 우연히 기능만 돌아가고 있는 상황으로 인식하고 있습니다. 혹시 관련된 답을 아시는 분이 있다면 정말 감사드리겠습니다.

gnarmeister commented 4 years ago

일단 제가 이해한 바로는.. BindingUtils.kt 안에 BindingAdapter들은 커스텀 데이터를 xml파일과 연결시키는 함수입니다. 다시 말해서 원래 지원하지 않는 새로운 복잡한 형식의 데이터를 어떤 뷰에 속성으로 추가해 xml파일과 바인딩할 때 쓰는 것 같습니다. 이번 과제의 bindAdapter와 bindItems는 각각 RecyclerView에 Adapter, Items라는 속성?을 추가해서 이를 우리가 앞에서 정의한 것들과 잘 연결시켜주는 역할을 하게 됩니다. 실제로 activity_main.xml파일에 recycler view 밑에 보면 원래는 지원하지 않는 app:adapter가 이 BindingAdapter에 의해 추가되고 데이터와 연결되어있는 것을 볼 수 있습니다.

그리고 두 번째에 null은 제 생각이지만 null이 당연히 들어올 수 있는게 맞는 것 같습니다. 왜냐하면 처음 앱을 키면 데이터가 암것도 없기 때문에 그때는 null이 들어오게 되고 이 경우 따로 처리하는게 맞는 것 같습니다.

https://dev-imaec.tistory.com/41 여기에 BindingAdapter에 대해 잘 되어있는것 같습니다.

davin111 commented 4 years ago

label 달아주세요~ @flux1126

sanggggg commented 4 years ago

@gnarmeister 님이 잘 설명해 주셔서 추가적으로 말씀드릴 부분은 없을 것 같습니다. 감사합니다

첨언을 좀 하자면,