Epoxy 라이브러리의 이해

라닉
3 min readJun 12, 2021

--

Epoxy 라이브러리란?

에폭시 라고 불리는 이 라이브러리는 Airbnb에서 제작한 안드로이드 라이브러리이다. 해당 Github Readme에 적혀있는 내용을 인용하자면 다음과 같다.

“RecyclerView에서 복잡한 화면을 쉽게 만들 수 있도록 도와주는 라이브러리”

리사이클러뷰안에 리사이클러뷰를 만드는 복잡한 화면을 만들때 상당히 복잡한 상황이 생길 수 있다. 정확한 이해를 위해 여러분에게 끔찍한 예시를 하나 들어보겠다.

우리는 메인 액티비티의 리사이클러뷰에 오늘의 뉴스(가로로 스크롤), 랭킹 뉴스(가로로 스크롤)를 띄우려고 한다. 다음 그림은 내가 만들고자 하는 화면의 구성요소이다.(그림판 힘들다.)

getItemViewType가 빠졌지만 나름 심혈을 기울여 그렸다!
  1. activity_main.xml에서 width와 height 가 match_parent인 RecyclerView에 오늘의 뉴스, 랭킹 뉴스가 표시된다. 이를 표시 하기 위해선 RecyclerView.Adapter가 필요하다.(mainAdapter)
  2. MainAdapter에선 ItemViewType에 따라 오늘의 뉴스, 랭킹 뉴스 뷰를 띄울지 결정해야하기 때문에 TodayNewsViewHolder, RankNewsViewHolder클래스를 생성했다.
  3. TodayNewsViewHolder의 뷰는 width가 match_parent, height가 300인 RecyclerView가 있다. 해당 RecyclerView안에 뉴스들을 띄워야기 하기 때문에 todayNewsAdapter가 필요하다.

??? : 비교적 간단한거 같은데요?

난 아직 세세하게 설명하지 않았다. 아직 RankNewsViewHolder가 남아있다.(위 3번 과정을 진행해야 한다.)

어우

예시로는 간단하게 두개의 뷰를 예시로 들었지만, 이런 화면을 8개, 10개를 만든다면 어떠한가? (머리가 지끈거린다.) 아래 그림은 실제로 Epoxy를 이용해 구현한 화면이다.

출처 : https://github.com/wisnukurniawan/epoxy-example

그럼 Epoxy를 사용하면 간단해지나요?

답변은 “그나마 그렇다” 이다. 에폭시 라이브러리를 이용하면 필자가 들었던 예시대로 복잡하게 만들지 않아도 된다. 우리가 사용하고자 하는 Model 클래스, Controller 클래스. 단 두가지만 생성하면 된다.

  • EpoxyModel
  • EpoxyController

EpoxyModel은 뭔가요?

EpoxyModel은 리사이클러뷰에 추가될 뷰의 데이터를 가지고 있고, 그 데이터를 이용해 리사이클러뷰에 해당 뷰를 어떻게 표시할 지 설명하는 클래스이다.

EpoxyController는요?

EpoxyController는 리사이클러뷰에 추가된 Model들을 제어하고, RecyclerView에 EpoxyModel 또는 ViewHolder를 유연하게 추가, 삭제할 수 있기 때문에 다양한 화면을 빠르고 쉽게 개발 가능하다.

감사합니다!

--

--

라닉
라닉

Written by 라닉

4년차 안드로이드 개발자입니다. https://github.com/takedawon

No responses yet