Epoxy란 Airbnb에서 만든 라이브러리이다.

RecyclerView에서 복잡한 화면 구성을 쉽게 구성할 수 있도록 도와주는 Declarative UI 이다.

Airbnb에서는 아래와 같이 설명하고 있다.

에폭시는 리싸이클러뷰에서 복잡한 화면구성을 도와주는 안드로이드 라이브러리이다. 모델은 어노테이션을 통해 커스텀뷰 또는 데이터바인딩 레이아웃에서 자동으로 생성된다. 생성된 모델은 Epoxy Controller에서 사용되고 리싸이클러뷰에 아이템이 보여진다.

뷰 홀더, diffing item, 바인딩 변경, 아이템 타입, 아이템 ids, span counts 등의 보일러 플레이트를 추상화해 여러 타입의 뷰의 유형으로 화면을 간단하게 만들 수 있다. 추가적으로 Epoxy는 뷰의 상태 저장 및 아이템 변경의 차이를 스스로 제공한다.

우리는(airbnb) RecyclerView로 작업하는 과정을 단순화 간소화 했고 필요한 기능을 추가했다. 우리는 앱의 대부분의 기본 화면에 Epoxy를 사용하여 개발자 경험이 크게 향상되었다.

아래 화면과 같이 화면을 구성을 할 떄 어떻게 구성하시겠나요?

sample_recyclerview.mp4

아마 리싸이클러뷰를 사용해 뷰타입을 나눠서 구성할 것 같다.

스크린샷 2022-03-27 오후 3.55.13.png

네모친 영역을 가로스크롤이 되야하고 고정길이면 스크롤뷰에 리니어를 넣어서 아이템을 넣어도 되겠지만 확장성을 고려해 리싸이클러뷰가 좋아보인다. 그렇다면 메인 리싸이클러뷰 안에 리싸이클러뷰 뷰타입을 넣고 해당 리싸이클러뷰를 컨트롤하기 위해 또 어댑터를 만들고 하는 번거로운 작업들이 생긴다. 만약 그 안에 또 리싸이클러뷰가 필요하다면....? 또 다시 어댑터를 만들어야하고 이렇게 되면 굉장히 복잡한 화면 구성을 가져가야 한다. 중첩되면 될 수록 컨트롤 하기도 힘들어지고 추후에 코드 파악도 힘들어 질 것 같다. 이러한 복잡한 화면 구성을 좀 더 쉽게 가져가기 위해 Epoxy를 사용할려 한다. (이건 사실이자 핑계임...이직한 회사의 기술스택이다....)

간단하게 Epoxy를 사용하기 전에 사전 준비와 컨셉에 대해 이해해보자.

Installation

<aside> 💡 Android Studio Bumblebee Gradle JDK 11 Kotlin version 1.6.10

</aside>

plugins {
   id 'kotlin-kapt'
}

android {
	 kapt {
	    correctErrorTypes = true
	 }
}

dependencies {
	implementation "com.airbnb.android:epoxy:5.0.0-beta03"
	kapt "com.airbnb.android:epoxy-processor:5.0.0-beta03"
}