뷰 바인딩(ViewBinding)
뷰 바인딩의 특징
- 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다
- 모듈에서 사용 설정된 뷰 바인딩은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성한다
- 바인딩 클래스의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함된다
- 대부분의 경우 뷰 바인딩이 findViewById를 대체한다
findViewById와의 차이점
- Null 안정성
- 뷰 바인딩을 사용하면, 앱이 레이아웃의 각 뷰를 직접 참조할 수 있게 해주는 안전한 코드를 자동으로 생성한다. 이것은 뷰를 사용할 때 'null' 값으로 인한 오류, 즉 뷰가 아직 화면에 나타나지 않았는데 그 뷰를 사용하려고 할 때 생길 수 있는 문제들을 예방한다
- 예를 들어, 만약 레이아웃에 버튼이 있어야 하는데 아직 버튼이 생성되지 않았다면, 뷰 바인딩은 이를 안전하게 처리하여 앱이 충돌하지 않도록 한다. 또한, 만약 레이아웃의 일부만 뷰가 있다면, 뷰 바인딩은 해당 뷰가 '가능성 있는 null(Nullable)임을 알려주어, 개발자가 더 주의 깊게 코드를 작성하도록 한다
- 타입 안정성
- XML 레이아웃 파일에서 정의된 뷰의 타입과 자동 생성된 바인딩 클래스의 필드 타입이 항상 일치하기 때문에, 타입이 서로 맞지 않아 발생할 수 있는 오류를 방지한다
- 예를 들어, 이미지 뷰(ImageView)에 텍스트를 설정하려고 하면 오류가 발생할 텐데, 뷰 바인딩을 사용하면 이런 실수를 할 가능성이 없어진다. 즉, 이미지 뷰는 이미지 뷰로, 텍스트 뷰는 텍스트 뷰로만 사용되게 하여, 잘못된 타입 사용으로 인한 오류가 발생하지 않도록 보장이 가능하다
뷰 바인딩 설정
- gradle 설정
- Activity 설정
** 이후 binding.button1처럼 사용하면 각 뷰의 id로 참조가 가능하다 **
어댑터(Adapter)
어댑터의 특징
- 데이터를 관리하며 데이터 원본과 어댑터뷰(ListView, GridView) 사이의 중계 역할을 한다
- 어댑터뷰(AdapterView)란?
- 여러개의 항목을 다양한 형식으로 나열하고 선택 할 수 있는 기능을 제공하는뷰
- 표시할 항목 데이터를 직접 관리하지 않고, 어댑터로부터 공급받는다
- 사용자가 어댑터뷰의 특정 위치의 항목을 선택하였을 때, 어댑터뷰는 선택된 항목, 항목ID, 항목뷰를 어댑터의 getItem(), getItemId(), getView() 메소드를 통해 얻어와서 이를 항목선택 이벤트 처리기에 넘겨준다
- 어댑터의 종류
- BaseAdapter
- ArrayAdapter
- CursorAdapter
- SimpleAdapter
어댑터를 이용한 간단한 ListView 예제
- XML 레이아웃 파일에 id 속성 정의
- 어댑터 객체 생성
- 객체에 어댑터 연결
리사이클러뷰(RecyclerView)
실무에서는 거의 RecyclerView를 사용한다
RecyclerView 사용 예제
- XML 레이아웃 파일에 id 속성 정의
- 데이터 저장 클래스 정의
- RecyclerView 오브젝트에 사용할 레이아웃 파일 생성
- 어댑터 클래스 정의
- 액티비티 코드 작성
- 실행결과