본문 바로가기
Android

[Android] RecyclerView의 성능 비결: ViewHolder 사용의 중요성

by quessr 2024. 4. 21.

 

RecyclerView에서 ViewHolder를 사용하는 주요 이유는 성능 향상과 메모리 사용 최적화에 있다.

RecyclerView는 대량의 데이터 세트를 효율적으로 표시하기 위해 설계된 안드로이드의 강력한 UI 컴포넌트이다.

데이터가 많을 때, 모든 항목을 한 번에 화면에 표시하는 것은 메모리를 많이 사용하고, 앱의 반응 속도를 느리게 할 수 있다.

여기에서 ViewHolder 패턴이 중요한 역할을 한다.

 

ViewHolder 패턴의 주요 기능

  1. 재사용(Recycling):
    ViewHolder
    패턴을 사용하면 스크롤할 때마다 새로운 뷰를 생성하는 대신, 화면에서 사라진 뷰를 재사용할 있다. 이는 뷰의 생성과 파괴로 인한 비용을 줄여준다.
  2. 찾기 비용 최소화(FindViewById):
    뷰를 재사용할 때마다 findViewById 호출하여 뷰의 참조를 얻는 것은 비용이 많이 든.
    ViewHolder
    패턴을 사용하면 뷰를 처음 로드할 번만 참조를 찾아서 저장하고, 재사용할 때는 이를 재활용할 있다.
    이로 인해 매번 뷰를 찾는 비용을 줄일 있다.
  3. 코드의 가독성 유지보수성 향상:
    ViewHolder
    패턴을 사용하면 뷰의 구성 요소를 관리하는 코드를 곳에 집중시킬 있다.
    이는 코드의 가독성을 높이고, 유지보수를 용이하게 힌.
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> mData;

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView;
        public ViewHolder(View v) {
            super(v);
            textView = v.findViewById(R.id.textView);
        }
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textView.setText(mData.get(position));
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }
}

 

 

예제에서 onCreateViewHolder 메소드는 홀더 객체를 생성하고 초기화하는 역할을 한.

onBindViewHolder 메소드는 홀더에 데이터를 바인딩하며, 과정에서 findViewById 다시 호출할 필요가 없다.

이러한 방식으로 RecyclerView ViewHolder 패턴은 안드로이드 앱의 리스트 또는 그리드 뷰의 성능을 크게 향상시킨다.