RecyclerView에서 ViewHolder를 사용하는 주요 이유는 성능 향상과 메모리 사용 최적화에 있다.
RecyclerView는 대량의 데이터 세트를 효율적으로 표시하기 위해 설계된 안드로이드의 강력한 UI 컴포넌트이다.
데이터가 많을 때, 모든 항목을 한 번에 화면에 표시하는 것은 메모리를 많이 사용하고, 앱의 반응 속도를 느리게 할 수 있다.
여기에서 ViewHolder 패턴이 중요한 역할을 한다.
ViewHolder 패턴의 주요 기능
- 뷰 재사용(Recycling):
ViewHolder 패턴을 사용하면 스크롤할 때마다 새로운 뷰를 생성하는 대신, 화면에서 사라진 뷰를 재사용할 수 있다. 이는 뷰의 생성과 파괴로 인한 비용을 줄여준다. - 뷰 찾기 비용 최소화(FindViewById):
뷰를 재사용할 때마다 findViewById를 호출하여 뷰의 참조를 얻는 것은 비용이 많이 든다.
ViewHolder 패턴을 사용하면 뷰를 처음 로드할 때 한 번만 뷰 참조를 찾아서 저장하고, 재사용할 때는 이를 재활용할 수 있다.
이로 인해 매번 뷰를 찾는 비용을 줄일 수 있다. - 코드의 가독성 및 유지보수성 향상:
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 패턴은 안드로이드 앱의 리스트 또는 그리드 뷰의 성능을 크게 향상시킨다.
반응형