본문 바로가기

TIL

TIL 37일차

뷰 바인딩(ViewBinding)

뷰 바인딩의 특징

  1. 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다
  2. 모듈에서 사용 설정된 뷰 바인딩은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성한다
  3. 바인딩 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함된다
  4. 대부분의 경우 뷰 바인딩이 findViewById를 대체한다

findViewById와의 차이점

  1. Null 안정성
    • 뷰 바인딩을 사용하면, 앱이 레이아웃의 각 뷰를 직접 참조할 수 있게 해주는 안전한 코드를 자동으로 생성한다. 이것은 뷰를 사용할 때 'null' 값으로 인한 오류, 즉 뷰가 아직 화면에 나타나지 않았는데 그 뷰를 사용하려고 할 때 생길 수 있는 문제들을 예방한다
    • 예를 들어, 만약 레이아웃에 버튼이 있어야 하는데 아직 버튼이 생성되지 않았다면, 뷰 바인딩은 이를 안전하게 처리하여 앱이 충돌하지 않도록 한다. 또한, 만약 레이아웃의 일부만 뷰가 있다면, 뷰 바인딩은 해당 뷰가 '가능성 있는 null(Nullable)임을 알려주어, 개발자가 더 주의 깊게 코드를 작성하도록 한다
  2. 타입 안정성
    • XML 레이아웃 파일에서 정의된 뷰의 타입과 자동 생성된 바인딩 클래스의 필드 타입이 항상 일치하기 때문에, 타입이 서로 맞지 않아 발생할 수 있는 오류를 방지한다
    • 예를 들어, 이미지 뷰(ImageView)에 텍스트를 설정하려고 하면 오류가 발생할 텐데, 뷰 바인딩을 사용하면 이런 실수를 할 가능성이 없어진다. 즉, 이미지 뷰는 이미지 뷰로, 텍스트 뷰는 텍스트 뷰로만 사용되게 하여, 잘못된 타입 사용으로 인한 오류가 발생하지 않도록 보장이 가능하다

뷰 바인딩 설정

  1. gradle 설정 
    android {} 안에 viewBinding = true 설정이 필요하다
  2. Activity 설정

 

Activity를 생성하면 가장 먼저 보이는 코드
binding을 사용할 때 필요한 코드는 항상 똑같으니 코드를 외워두면 편하다

 

** 이후 binding.button1처럼 사용하면 각 뷰의 id로 참조가 가능하다 **

 

어댑터(Adapter)

어댑터의 특징

  1. 데이터를 관리하며 데이터 원본과 어댑터뷰(ListView, GridView) 사이의 중계 역할을 한다
  2. 어댑터뷰(AdapterView)란?
    • 여러개의 항목을 다양한 형식으로 나열하고 선택 할 수 있는 기능을 제공하는뷰
    • 표시할 항목 데이터를 직접 관리하지 않고, 어댑터로부터 공급받는다
  3. 사용자가 어댑터뷰의 특정 위치의 항목을 선택하였을 때, 어댑터뷰는 선택된 항목, 항목ID, 항목뷰를 어댑터의 getItem(), getItemId(), getView() 메소드를 통해 얻어와서 이를 항목선택 이벤트 처리기에 넘겨준다
  4. 어댑터의 종류
    • BaseAdapter
    • ArrayAdapter
    • CursorAdapter
    • SimpleAdapter

 

어댑터를 이용한 간단한 ListView 예제

  1. XML 레이아웃 파일에 id 속성 정의
  2. 어댑터 객체 생성
    String 배열을 이용한 ArrayAdapter 객체를 생성했다
    android studio에 기본적으로 내장되어 있는 리소스 id
  3. 객체에 어댑터 연결

잘 작동되는 모습

 

리사이클러뷰(RecyclerView)

실무에서는 거의 RecyclerView를 사용한다

RecyclerView 사용 예제

  1. XML 레이아웃 파일에 id 속성 정의
  2. 데이터 저장 클래스 정의
    MyItem이라는 data class를 만들고
    데이터를 넣어둔다
  3. RecyclerView 오브젝트에 사용할 레이아웃 파일 생성
  4. 어댑터 클래스 정의
    MyAdapter 어댑터 파일 생성, getItem 부분은 반드시 오버라이딩 해야한다
  5. 액티비티 코드 작성
  6. 실행결과


잘 작동하는 모습, 사진에서는 RecyclerView 크기를 조금 수정했다

 

 

'TIL' 카테고리의 다른 글

TIL 39일차  (0) 2024.04.15
TIL 38일차  (0) 2024.04.11
TIL 36일차  (0) 2024.04.05
TIL 35일차  (0) 2024.04.04
TIL 34일차  (0) 2024.04.03