본문 바로가기
Android

[안드로이드 JetPack] 데이터 바인딩

by Sky Titan 2020. 8. 23.
728x90
 

Android 개발자  |  Android Developers

Jetpack은 개발자가 관심 있는 코드에 집중할 수 있도록 권장사항 준수, 상용구 코드 제거, Android 버전과 기기에서 일관되게 작동하는 코드 작성을 돕는 라이브러리 모음입니다.

developer.android.com

 

JetPack 라이브러리

  • 안드로이드 개발자 페이지의 소개에 따르면 개발자가 관심있는 코드에 집중할 수 있도록 권장사항 준수, 상용구 코드 제거, 안드로이드 버전과 기기에 일관되게 작동하는 코드 작성을 돕는 라이브러리라고 명시되어 있습니다.
  1. 권장사항 준수
    • 최신 설계 방식을 바탕으로 빌드된 안드로이드 Jetpack 라이브러리는 이전 버전과의 호환성 기능이 통합되어 비정상 종료, 메모리 누수를 줄일 수 있게 해줍니다.
  2. 상용구 코드 제거
    • 개발자가 뛰어난 앱을 만드는 데에만 집중할 수 있도록 백그라운드 작업, 탐색, 수명 주기 관리 등 반복적이고 지루한 활동을 관리해 줍니다.
  3. 파편화 줄이기
    • 안드로이드 버전 및 기기에서 일관되게 작동하는 라이브러리를 사용하여 복잡성을 줄입니다.

 

요약

: 기존 안드로이드 지원 라이브러리에 더하여 개발자가 더 효율적이고 쉽게, 더 뛰어난 앱을 개발할 수 있도록 반복적인 작업들을 최소화해주고 추가적인 기능들을 제공해주는 라이브러리... 정도로 요약할 수 있을 것 같습니다.

 

 Jetpack 라이브러리는 보통 4가지 컴포넌트로 분류하며 Architecture, UI, Foundation, Behavior 가 해당합니다.

이 중 Architecture는 AAC (Android Architecture Component) 라고 불리며 주로 안드로이드의 컴포넌트들의 생명주기를 처리하는 가이드라인과 기능들을 제공합니다. 오늘은 그 중 Databinding 에 대해서 간략하게 말해 보겠습니다.

 

 

데이터 결합 (Databinding)

 

데이터 결합 라이브러리  |  Android 개발자  |  Android Developers

데이터 결합 라이브러리 Android Jetpack의 구성요소. 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선언적 형식으로 레이아웃의 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 ��

developer.android.com

  • 기존엔 앱 내에 존재하는 데이터를 View에 넣기 위해선 프로그래밍 방식의 자바 코드로 일일이 입력해야했습니다.
TextView user_name = (TextView) findViewById(R.id.user_name_text);
user_name.setText("하늘 거인");

  • 하지만 Databinding은 xml에서 선언적 형식으로 Model에 있는 데이터를 View에 바로 결합하여 개발자는 데이터를 업데이트 하는 것에만 신경쓰면 되고 View에 결합하는 것은 신경쓰지 않아도 됩니다.
<TextView
        android:id="@+id/user_name_text"
        android:text="@{viewmodel.userName}" />

 

사용법

1. build.gradle 설정


android {
        ...
        dataBinding {
            enabled = true
        }
    }

 

2. 레이아웃 xml 파일 설정


<?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
       <data>
           <variable name="user" type="com.example.User"/>
       </data>
       <LinearLayout
           android:orientation="vertical"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
           <TextView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="@{user.firstName}"/>
           <TextView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="@{user.lastName}"/>
       </LinearLayout>
    </layout>

 

  • 기존에 선언했던 태그들을 <layout> </layout> 태그로 감쌉니다
  • <data> </data> 태그 안에 <variable>로 바인딩해 올 객체를 선언합니다.
  • 객체 내의 프로퍼티, 메소드를 view들에 @{} 구문을 사용하여 바인딩합니다.

 

3. activity 클래스에서 바인딩 객체 설정


    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
       User user = new User("Test", "User");
       binding.setUser(user);
    }

  • 레이아웃 파일에서 <layout></layout>과 <data></data> 태그로 바인딩할 것을 선언하게 되면 자동적으로 해당 레이아웃의 Binding 클래스가 생성됩니다. (예시 : activity_main.xml -> ActivityMainBinding)
  • 그리고 자바 activity 클래스에서 binding 객체를 가져온 후 아까 레이아웃에서 바인딩하려고 했던 user 객체를 set합니다. (메서드 또한 자동 생성

 

표현식

 

레이아웃 및 결합 표현식  |  Android 개발자  |  Android Developers

표현식 언어를 사용하면 뷰에 의해 전달된 이벤트를 처리하는 표현식을 작성할 수 있습니다. 데이터 결합 라이브러리는 레이아웃의 뷰를 데이터 객체와 결합하는 데 필요한 클래스를 자동으로

developer.android.com

  • 레이아웃에서 사용할 수 있는 바인딩 표현식은 꽤 다양합니다. 기본적인 산술 연산, 논리 연산, 비교 연산 등등 상황에 맞게 사용하면 될 듯 합니다.
728x90

댓글