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

Epoxy에서 모델클래스에서 이것들 차이점좀 알려주세요

0 추천

Epoxy 사용법이 여러개가 있던데.. 

이것들 차이점을 잘모르겠습니다...

 

@EpoxyModelClass(layout = R.layout.singlefood_layout)
abstract class SingleFoodModel :
     EpoxyModelWithHolder<SingleFoodModel.FoodHolder>(){

    @EpoxyAttribute
    var id : Long = 0

    @EpoxyAttribute
    @DrawableRes
    var image : Int = 0

    @EpoxyAttribute
    var title:String? = ""

    @EpoxyAttribute
    var desc:String = ""

    override fun bind(holder: FoodHolder) {
        holder.imageView?.setImageResource(image)
        holder.titleView?.text = title
    }

-----------------------------------------
//방법 1
    inner class FoodHolder : EpoxyHolder(){

        lateinit var imageView:ImageView
        lateinit var titleView: TextView
        lateinit var descView:TextView

        override fun bindView(itemView: View?) {
            imageView = itemView?.image
            titleView = itemView?.title
            descView = itemView?.desc
        }
    }
    
-----------------------------------------
//방법 2
    //다른 방법입니다. KotlinHolder를 사용하면 다음을 따르면 됩니다.
    
    inner class ItemsHolder : KotlinHolder() {
        val imageView by bind<TextView>(해당 컴포넌트의 id R.id.imageView)
        val titleView by bind<TextView>(R.id.titleView)
        val descView by bind<TextView>(R.id.descView)
    }
------------------------------------------
}

이 모델 클래스 내의 Holder 클래스에서 1번 방법이 대체로 사용하는 방법같은데..

어떤 블로그에서 보니 findViewById를 사용을 안하더라구요. 그런데 제가 사용하기위해 다른 블로그 같은곳

을 봤을때는 또 사용을 하는곳이 있더라구요, 아니면 방법 2처럼 KotlinEpoxyHolder로 변경해서 쓰거나..

제가 왜 findViewById 사용 여부를 물어보냐면..

https://youtu.be/Ce-CPNdOAsI

이 영상에서 모델클래스로 ViewBindingKotlinModel 이라고

Epoxy 의 깃(epoxy/ViewBindingKotlinModel.kt at master · airbnb/epoxy (github.com))에서 해당 helper 클래스의 파일을 직접 만들어 코드 복사후 사용하는데, 이건 이름에서도 나와있듯이

레이아웃파일을 바로 ViewBinding해서 사용하기 위한것같은데요..

이것때문에 findViewByID를 사용하는지 안하는지 여쭈어보는겁니다..

위의 방법1번도 마찬가지로 ViewBinding을 가능케한다면, 영상과 링크의 방법은 전혀 필요없는

부분아닌가요/

 

아니면 무슨 특별한 차이점이 있나요?

codeslave (3,940 포인트) 님이 2021년 10월 7일 질문

1개의 답변

0 추천
말씀하신 게 맞는 게 같네요. ViewBinding 을 사용하기 위해서 만들어진 유틸 클래스예요. 근데 소스코드를 보니 Reflection을 사용하고 있네요. Reflection은 안드로이드 개발에서는 퍼포먼스나 보안상의 이유로 웬만하면 피하는 방법이긴한데 해당 코드 정도는 문제가 없을 수도 있겠네요.
spark (224,800 포인트) 님이 2021년 10월 7일 답변
viewbindingkotlinmodel 클래스가 Reflection을 사용하고 있다는건가요?
ViewBinding때문에 이 클래스를 사용하는것 같은데 본문 코드에서는 이런 클래스를 사용하지 않고도 ViewBinding 하듯이 사용하여 이유가 궁금하네요.. 위 코드는 엄청 최근에 올라온 코드를 가져온거라 그동안 뭔가 업데이트가 됐는지..
Epoxy ViewHolder는 어떤 형태가 되었던 뷰의 바인딩을 위해서 findViewById나 Butterknife, ViewBinding 중 하나를 사용하는 것 같은데요. 어차피 안드로이드에서는 이 방법 외에는 뷰를 바인딩하는 방법은 사용하지 않으니까요.
음.. 그럼 셋다 사용가능할것같다라는 의미시죠? 참고하겠습니다 감사합니다
...