코틀린 [Kotlin/Android] DataBinding

황제낙엽 2022.11.13 06:51 조회 수 : 207

1. DataBinding 이란

  - xml에 있는 데이터들을 코드단으로 손쉽게 바인딩 시켜준다.

  - 2019년 Google I/O에서 설명한바 있다. DataBinding, Navigation, Room, View Model .. 등등

 

2. 장점

  - findViewId 를 쓰면, 런타임에 뷰 계층 구조를 찾아야하며, 딥 뷰 계층 같은 경우는 사용자 앱 속도를 늦출 수 있다. 이것을 해결하기 위해서 DataBinding 기술과 패턴이 나왔다.

  - 컴파일 타임에 레이아웃 또는 프래그먼트들을 연결할 수 있게 만들어주어, DataBinding 으로 오버 헤드 없이 사용할 수 있는 장점이 있다.

 

3. 개발 환경

  - Android Studio 3.6 이상

 

4. Gradle 설정 (Module: app)

android {
    ...
    dataBinding {
        enabled = true
    }

    buildFeatures{
        dataBinding = true
        viewBinding = true
    }
}

 

5. xml 설정 (layout > activity_main.xml)

  명심해야할것은 꼭 최상위 <layout> </layout> 으로  감싸야한다.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:gravity="center"
        android:orientation="vertical"
        tools:context=".MainActivity">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30sp" />

        <Button
            android:id="@+id/roll_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/roll" />
    </LinearLayout>

</layout>

 

6. kotlin (MainActivity.kt)

class MainActivity : AppCompatActivity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.rollButton.text = "Let's Roll!!"
    }
    
}

  ActivityMainBinding 을 하고, import 된것을 보면, [패키지명].[프로젝트명].databinding.ActivityMainBinding 으로 될 것이다.

  import [패키지명].[프로젝트명].databinding.ActivityMainBinding 코드로 임포트 해야 한다

  그리고 다음과 같이 접근할 수 있다

lateinit var binding: ActivityMainBinding

binding = ActivityMainBinding.inflate(layoutInflater)

 

  이름이 정의된 규칙은 아래와 같다.

 

  1) xml 파일 명이 activity_main.xml 이면 ActivityMainBinding 이다.

  2) xml 파일 명이 main_activity.xml 이면 MainActivityBinding 이다.

 

7. 결과

  - setContextView 가 없어지고, DataBindingUtil 으로 setContextView 하는것을 볼 수 있다.

  - binding 객체로 findViewId 없이, xml에 선언된 +id/roll_button가 binding.rollButton 으로 접근 가능해졌다.

 

 

 

※ 클래스 파일에서 binding code가 계속해서 에러를 뱉어낸다면 Clean Project, Rebuild Project 를 수행하도록 한다

번호 제목 글쓴이 날짜 조회 수
108 jetpack compose 란 황제낙엽 2022.12.19 211
107 android jetpack 이란? 황제낙엽 2022.12.19 179
106 구글 ML Kit Vision Quickstart 실행 file 황제낙엽 2022.12.14 95
105 [구글 ML Kit Vision Quickstart 분석] Intro file 황제낙엽 2022.12.13 241
104 Vision API로 카드번호 인식 개발하기(OCR) file 황제낙엽 2022.12.02 126
103 View Binding(뷰 바인딩) 황제낙엽 2022.11.30 116
102 view 객체의 eventlistener 함수 정의와 실행 분석 (StillImageActivity.kt) 황제낙엽 2022.11.29 143
101 람다를 활용한 이벤트 리스너 정의 (자바와 코틀린 비교) 황제낙엽 2022.11.29 227
100 [코틀린] 고차함수와 람다함수 file 황제낙엽 2022.11.29 183
99 코틀린 코루틴 관련 포스트 file 황제낙엽 2022.11.29 170
98 [코틀린] 고차함수 황제낙엽 2022.11.28 165
97 MenuInflater 황제낙엽 2022.11.25 104
96 android gradle plugin 의 kotlin_version 수정 황제낙엽 2022.11.22 232
95 android:exported 황제낙엽 2022.11.22 189
» [Kotlin/Android] DataBinding 황제낙엽 2022.11.13 207
93 startActivityForResult 가 deprecated 된 이유 황제낙엽 2022.11.11 107
92 [코틀린, 카메라 샘플] QRCodeReader (샘플 확인 완료) file 황제낙엽 2022.11.11 223
91 [코틀린, youtube, 안드로이드 앱 만들기] 카메라로 사진 찍기 (샘플 확인 완료) file 황제낙엽 2022.11.11 303
90 용어 사전 황제낙엽 2022.11.04 146
89 Kotlin의 기본 문법 황제낙엽 2022.11.04 376