마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

코틀린에서 리사이클러뷰 아이템 클릭 이벤트 구현시

0 추천
코틀린은 람다식이 사용가능하고 인자로 전달하거나 전달 받을 수 있잖아요?

 

자바에서는 아이템 클릭을 구현하려면 어댑터든 어디서든 아이템 클릭 인터페이스를 만들고

액티비티같은 곳에서 이 인터페이스를 구현한 후 어댑터에 구현한 것을 전달해서 클릭시 호출하는

방식을 사용할텐데요.

 

코틀린은 인터페이스 필요없이 그냥 함수를 정의하고 어댑터로 이 함수를 전달한 후,

클릭이벤트시 이 함수를 호출해주면 되는데요,

그냥 단순히 이렇게 사용해도 크게 상관 없을까요?

 

 

+) 참고로 어댑터내에 3개의 뷰홀더가 있습니다.
codeslave (3,940 포인트) 님이 2021년 7월 17일 질문
codeslave님이 2021년 7월 17일 수정

1개의 답변

0 추천
상관없습니다. 자바로 변환된 코드를 보시면 내부적으로 인터페이스에 대한 인스턴스가 생성됩니다. 자바도 Function class가 있는데, 자바가 모던한 랭귀지가 아니어서 바로 function을 쓸 수가 없기에 만들어낸 클래스입니다.

한가지 주의하실 점은 함수를 넘기는 것은 동적으로 생성된 오브젝트를 사용하는 거라 안드로이드 시스템에서 자동으로 메모리 수거를 안하게 되는 경우가 생겨 메모리 누수가 나기 쉽습니다. 물론 로컬변수라면 문제없겠지만 Activity나 ViewModel같은 데서 멤버변수로 사용된다면 불필요해지거나 사용 후에는 해제할 수 있다면 하는 것이 좋습니다.

RecyclerView.Adapter같은 경우는 적절한 라이프 사이클 이벤트에 RecyclerView.adapter = null로 만드셔서 해제해 주시는 것이 좋습니다. LeakCanary라는 Square의 라이브러리를 세팅하시면 메모리 누수가 날 때 알려줍니다. 생각보다 많은 부분에서 메모리 누수가 발생하는 것을 볼 수 있습니다.
spark (227,470 포인트) 님이 2021년 7월 17일 답변
감사합니다. 그런데 클릭이벤트가 여러개일때도 해당사항이 같나요?
클릭이벤트가 여러개일 경우 어댑터에 인자로 보내는 갯수가 많아지는데,
지저분해보인다거나 비효율적이라거나 그런건 별개의 문제라 상관없을까요?
디자인 패턴이니 아키텍쳐니 하는 것들이 기본적으로는 정답이 없습니다. 가이드라인입니다.
대신 방향성을 제시해 줄 수 있습니다. 님의 질문은 더더욱 그런 쪽에 속합니다. 어느 것이 정답이라고 일반화시켜서 이야기할 수 없습니다. 다만 우선적으로 고려해야 할 사항들은 말씀드릴 수 있습니다.
1. Readability(가독성) - 이게 제일 중요하다고 생각합니다. 누가 봐도 코드의 의도가 명확해서 이해가 가야 나중에 변경사항이 생겨서 작업할 때 시간도 덜 걸리고 버그 유발도 덜하게 됩니다.
2. Consistency(일관성) - 이건 팀으로 일할 때는 상당히 중요한 부분이고 혼자서 일할 때도 고려해야할 사항입니다. 그래야 여기에는 이렇게 처리했는데, 저기에는 왜 저렇게 처리했지 하는 의문이 안생기고 첫번째 항목에도 도움이 됩니다.
3. 팀의 결정 - 두번째와 약간 겹치는데, 팀으로 일한 다음 어떤 것이되었든 팀원이 합의한 사항을 따라야 합니다.
위의 부분들을 고려하신다면, 님의 상황에서 어떤 것이 최선인지 선택하실 수 있을 겁니다.
...