6. Adapter의 기본 개념과 응용

YeongJun Son·2023년 10월 12일
0

Android를 배우다

목록 보기
6/7

Adapter의 기본 개념과 응용

들어가며

학습 목표

  1. Adapter의 기본적인 개념, 특징, 사용법, 주의사항을 숙지한다.
  2. Adapter 클래스를 목적에 맞게 커스터마이징하는 방법을 살펴본다.

학습 상황

  1. Adapter를 이용해서 틱택토 게임을 구현한다.
  2. 메인 게임 보드와 RecyclerView 내 게임 내역을 각기 다른 커스텀 어댑터 클래스를 이용해 구현해야 했다.

Adapter란?

Adapter의 개념

  • Adapter는 중개자 역할을 수행하는 객체로, 데이터와 UI 요소 사이의 인터페이스 역할을 한다.

  • Adapter는 데이터를 UI 요소로 변환하여 표시하거나, UI 요소에서 사용자 입력을 데이터로 변환한다.

  • 주로 ListView, RecyclerView, Spinner 및 GridView 등에서 쓰인다.

Adapter의 특징

  • 데이터 소스 연결

    Adapter는 데이터 소스 (배열, 목록, 데이터베이스)와 UI 요소 (리스트 아이템, 뷰 홀더) 간의 연결을 담당

  • 재사용성

    Adapter는 UI 요소의 재사용을 관리하며, 데이터카 스크롤될 때 UI 요소를 효율적으로 재사용한다. 이는 메모리 및 성능 향상에 도움이 된다.

  • 데이터와 뷰 결합

    Adapter는 데이터를 뷰에 바인딩하고 UI 요소를 데이터와 연결하여 데이터의 시각적 표현을 제공한다.

Adapter 사용법

  1. 데이터 소스를 설정한다. 이는 View에 표시하려는 내용이다.

  2. Adapter 클래스를 사용하여 데이터를 UI 요소로 변환하고, UI 요소를 레이아웃 파일과 연결한다.

  3. Activity에서 AdapterView에 Adapter와 (RecyclerView라면) LayoutManager를 설정한다.

  4. Adapter에 대한 이벤트 처리 및 사용자 입력 처리를 설정한다.

Adapter 사용 시 주의사항

  • 성능 최적화
    Adapter는 UI에서 재사용되므로 데이터를 효율적으로 처리하고, 불필요한 객체 생성을 피해야 한다.

  • 데이터 업데이트
    데이터가 동적으로 변경되면 Adapter에 변경 사항을 알려야 한다.

    • notifyDataSetChanged(), notifyItemChanged(position: Int), notifyItemInserted(position: Int), notifyItemRemoved(position: Int),
      notifyItemRangeChanged(positionStart: Int, itemCount: Int) 등을 이용한다.
  • 뷰 홀더
    뷰 홀더 패턴을 구현하여 뷰의 재사용을 최적화해야 한다

  • Null 체크
    null 예외를 방지하기 위해 null 체크 수행

  • 쓰레드
    데이터 업데이트나 UI 업데이트는 메인 스레드에서 수행되어야 한다.

Adapter 응용: 커스텀 어댑터

Adapter 클래스 커스터마이즈

  1. Adapter 상속
  • ‘BaseAdapter’, ‘ArrayAdapter’, ‘RecyclerView.Adapter’ 등의 어댑터 클래스 중 하나를 상속한다.
  1. 상속되는 추상 클래스에 필수적인 메서드 구현
  • BaseAdapter를 상속해서 커스텀 어댑터를 만들 수 있다. 필수적으로 구현해야 하는 메서드는 다음과 같다.
    • getCount(): 몇 개의 항목을 표시해야 하는 지, 데이터의 총 개수를 반환한다.
    • getItem(position: Int): 특정 위치에 잇는 데이터 항목을 반환한다.
    • getItemId(position: Int): 특정 위치에 있는 데이터 항목의 고유 ID를 반환한다.
    • getView(position: Int, convertView: View, parent: ViewGroup)이다.
      → 각 데이터 아이템을 렌더링해서 View 객체로 반환한다. 여기에서 convertView는 재사용할 레이아웃 요소를 의미한다.
      → convertView는 재활용 가능한 뷰 객체로, 이전 화면에 나타난 뷰 중 재사용 가능한 뷰를 나타낸다.
  • ArrayAdapter는 BaseAdapter를 상속한 클래스로, 다음 메서드를 추가적으로 구현해야 한다.
    • constructor(context: Context, resource: Int, objects: List) Adapter를 초기화하는 생성자로 context는 액티비티 또는 컨텍스트, resourece는 각항목을 나타내는 레이아웃 리소스 ID, object는 리스트다.
  • RecyclerView.Adapter에서는 뷰 홀더 패턴을 사용하는데, onCreateViewHolder 메서드 및 onBindViewHolder 메서드를 사용해 뷰 홀더를 생성하고 데이터를 바인딩한다.
  1. 뷰 홀더 클래스 정의
  • 뷰 홀더 클래스를 내부 클래스로 정의하고, 해당 클래스에 뷰에 대한 참조를 저장한다.
  1. 데이터 업데이트 메서드 및 이벤트 처리 추가
  • Adapter 내에 데이터를 업데이트 하는 메서드를 추가하고, 이를 호출해 데이터를 업데이트하면 변경 사항을 반영한다. 이는 이벤트 처리를 통해 이루어질 수도 있다.
profile
제가 좋아하는 것은 도가 아니라 기입니다

0개의 댓글