Frontend/이론정리

안드로이드 앱 : 어댑터와 뷰홀더란?

qoeka 2025. 3. 7. 11:05

 

 

안드로이드 스튜디오에서 어댑터(Adapter)와 뷰홀더(ViewHolder)란?

 

 

안드로이드 앱을 만들 때, 리스트 형태로 많은 데이터를 화면에 보여주고 싶다면 RecyclerView를 사용한다. 그런데 RecyclerView는 데이터를 직접 화면에 표시하지 않고, 대신 Adapter(어댑터)와 ViewHolder(뷰홀더)라는 친구들에게 도움을 요청한다.

 

 

1. 어댑터(Adapter)란?

 

 

 

어댑터는 데이터를 받아서 화면에 보여주는 역할을 한다. 마치 식당에서 손님이 주문한 음식을 주방에서 가져와 테이블에 서빙하는 웨이터와 같다.

 

어댑터가 하는 일

  • 데이터(예: 연락처 목록, 사진 리스트)를 RecyclerView에 맞게 변환한다.
  • 각 아이템이 어떤 모습으로 화면에 보일지 정한다.
  • 새로운 데이터가 생기거나 삭제될 때 화면을 갱신한다.

 

 

2. 뷰홀더(ViewHolder)란?

 

 

뷰홀더는 리스트의 각 아이템을 담는 역할을 한다. 쉽게 말하면, 음식을 담는 접시와 같다.

뷰홀더가 하는 일

  • 화면에 표시할 요소(예: 텍스트, 이미지)를 찾는다.
  • 스크롤할 때 기존 뷰를 재사용해서 앱을 빠르게 만든다.

 

3. 어댑터와 뷰홀더를 어떻게 사용할까?

예를 들어, 간단한 연락처 목록을 RecyclerView에 표시하는 어댑터와 뷰홀더를 만들어 보자.

1) 뷰홀더 만들기

public class ContactViewHolder extends RecyclerView.ViewHolder {
    TextView txtName;
    TextView txtPhone;

    public ContactViewHolder(@NonNull View itemView) {
        super(itemView);
        txtName = itemView.findViewById(R.id.txtName);
        txtPhone = itemView.findViewById(R.id.txtPhone);
    }
}

2) 어댑터 만들기

public class ContactAdapter extends RecyclerView.Adapter<ContactViewHolder> {
    private List<Contact> contactList;

    public ContactAdapter(List<Contact> contactList) {
        this.contactList = contactList;
    }

    @NonNull
    @Override
    public ContactViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.contact_item, parent, false);
        return new ContactViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) {
        Contact contact = contactList.get(position);
        holder.txtName.setText(contact.getName());
        holder.txtPhone.setText(contact.getPhone());
    }

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

3) RecyclerView에 연결하기

RecyclerView recyclerView = findViewById(R.id.recyclerView);
ContactAdapter adapter = new ContactAdapter(contactList);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

4. 정리하기

  • 어댑터(Adapter): 데이터를 화면에 표시하는 웨이터!
  • 뷰홀더(ViewHolder): 아이템을 담는 접시!
  • RecyclerView: 많은 데이터를 빠르게 보여주는 리스트!