인프런 커뮤니티 질문&답변

이상민 (Onz)님의 프로필 이미지
이상민 (Onz)

작성한 질문수

윤재성의 Kotlin 기반 안드로이드 앱 개발 Part1 - UI Programming

31강 RatringBar

리스너 함수에서 when 사용 질문

작성

·

143

0

안녕하세요.

리스너 함수에서 문득 궁금한게 있어 문의드립니다.

    val listener = object: RatingBar.OnRatingBarChangeListener {
        override fun onRatingChanged(ratingBar: RatingBar?, rating: Float, fromUser: Boolean) {
            when(ratingBar?.id){
                R.id.ratingBar2 -> {
                    textView.text = "Rating 2 : $rating\n"
                    if (fromUser) textView.append("사용자에 의해 설정\n")
                    else textView.append("코드에 의해 설정\n")
                }
                R.id.ratingBar3 -> {
                    textView2.text = "Rating 3 : $rating\n"
                    if (fromUser) textView2.append("사용자에 의해 설정\n")
                    else textView2.append("코드에 의해 설정\n")
                }
            }
        }
    }

위와 같이 when(ratingBar?.id) 를 사용하고 R.id.ratingBar2 이런식으로 일치하는게 있는지 확인하는데

아래와 같이 사용해도 동일하게 작동하더라고요.

val listener = object: RatingBar.OnRatingBarChangeListener {
        override fun onRatingChanged(rb: RatingBar?, rating: Float, fromUser: Boolean) {
            when(rb){
                ratingBar2 -> {
                    textView.text = "Rating 2 : $rating\n"
                    if (fromUser) textView.append("사용자에 의해 설정\n")
                    else textView.append("코드에 의해 설정\n")
                }
                ratingBar3 -> {
                    textView2.text = "Rating 3 : $rating\n"
                    if (fromUser) textView2.append("사용자에 의해 설정\n")
                    else textView2.append("코드에 의해 설정\n")
                }
            }
        }
    }

아직 kotlin에 대한 이해도가 부족해서 그런 걸 수도  있는데

when(rb)를 사용해서 객체들과 직접 비교하는게 더 간결해보이는데 R.id에서 id를 가져와 비교하는 이유가 뭔지 궁금합니다.

성능이라던가 다른 요인이 있는 걸까요?

답변 1

0

소프트캠퍼스님의 프로필 이미지
소프트캠퍼스
지식공유자

위에것은 id 값을 비교하는 것이고 아래 것은 객체의 주소값을 비교하는 것입니다. 방법의 차이가 있을 뿐입니다. 다만 id는 개발자가 정해주는 것이기에 id를 더 권장하고 있습니다.

이상민 (Onz)님의 프로필 이미지
이상민 (Onz)

작성한 질문수

질문하기