Android (안드로이드)

[Android] 데이터 바인딩 / DataBinding / 사용법 / 예제

Oscar:) 2024. 2. 12. 15:01

 

 

 

이번엔 데이터 바인딩에 대해 알아보자.

 

 


 

데이터 바인딩이란?

 

 

공식 문서 ↓

 

 

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

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 데이터 결합 라이브러리 Android Jetpack의 구성요소. 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선

developer.android.com

 


 

Android Jetpack의 구성 요소 중 하나로, 프로그래매틱 방식이 아닌 선언형 방식으로써

UI 구성요소를 앱의 데이터와 결합할 수 있도록 지원하는 라이브러리다.

 

 

 

일반적으로 View에 데이터를 할당하려면 다음과 같은 절차가 필요하다.

TextView textView = findViewById(R.id.textView);
textView.setText(viewModel.name);

 

 

 

데이터 바인딩은 xml 파일에서 직접 View에 데이터를 할당한다.

<TextView
    android:text="@{viewModel.name}"
/>

 

 

위 처럼 레이아웃 파일에서 데이터를 View와 바인딩하게 되면 코드를 작성하는 파일에서

View를 참조하는 부분이 삭제되기 때문에 파일이 가벼워지고 유지·보수 또한 편리해진다.

 

자세한 내용은 직접 사용해보며 확인해보자.

 

 

 


 

사용해보자

 

 

✅ 그래들 요소 추가

 

 

build.gradle(모듈 수준)에 다음 요소를 추가한다.

android {

    ...

    dataBinding {
        enabled = true
    }

}

 

 

 


 

 

✅ 레이아웃 파일

 

 

데이터 클래스로 Student 클래스를 만들어 줄 예정인데,

이미 생성했다고 가정하고 xml 파일부터 보자.

 

 

activity_main.xml

<layout>

    <data>
        
        <variable
            name="student"
            type="com.example.databinding_test.Student"
        />
        
    </data>

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{student.name}"
    />
    
    </LinearLayout>

</layout>

 

 

파일 첫 부분부터 익숙하지 않은 문법이 보일 수 있다.

데이터 바인딩을 사용하기 위한 일련의 과정이다.

 

 

● 데이터 바인딩을 사용하기 위해서는 레이아웃 전체 코드를 <layout> 태그로 감싸줘야 한다.

 

레이아웃 파일에서 데이터를 다루기 위해 <data>, <variable> 태그를 추가해줬다.

<variable> 태그 내 type 속성으로 다른 클래스를 참조해올 수 있다.

여기서는 Student 클래스를 참조해왔다.

 

● TextView의 text 속성에 데이터 바인딩 문법이 사용되었다.

일반 텍스트가 작성될 곳에 위와 같이 "@{데이터}" 이렇게 작성해주면 된다.

 

 

 


 

 

✅ 데이터 클래스

 

 

간단하게 학생의 이름만 들어갈 데이터 클래스를 만들어 주겠다.

 

 

Student.java

public class Student {

    String name;
    
    public Student(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

 

 

 


 

 

✅ 액티비티

 

 

액티비티의 onCreate() 부분에서만 다루겠다.

 

 

MainActivity.java

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;
    Student student;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // 바인딩 객체에 setContentView()
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        
        // LifecycleOwner 지정
        binding.setLifecycleOwner(this);

        binding.checkBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                student = new Student("Oscar");
                
                // 레이아웃 파일의 Student 변수에 Student 객체 할당
                binding.setStudent(student);

            }
        });

    }

}

 

 

앞선 뷰 바인딩 포스팅에서도 언급했던 내용이지만, 바인딩 클래스는

xml 파일 이름을 카멜 표기법으로 변환하고 Binding을 붙여 자동 생성된다.

 

 

재미있는 점은, 레이아웃 파일에 Student 변수를 선언해주면

위 처럼 바인딩 클래스에 setStudent() 메서드도 자동 생성되고,

데이터 클래스의 getter() · setter() 메서드도 알아서 활용하여 적용해준다.

 

 

 

기존의 레이아웃 참조 방식인 setContentView()를 바인딩 객체에 할당했기에

뷰 바인딩과 같이 해당 레이아웃의 모든 View를 참조해올 수 있다.

 

그 외 중요 부분에 모두 주석을 달았으니 확인하기 바란다.

 

 

 


 

 

✅ 결과

 

 

 

 

 


 

 

✅ 정리 

 

 

▶ 레이아웃 파일에 데이터를 다룰 클래스 선언

 

레이아웃 내 데이터가 들어갈 View에 데이터 선언

 

액티비티에서 데이터 바인딩 객체 생성 후 레이아웃 파일 연결

 

▶ 바인딩 객체에 LifecycleOwner 지정

 

바인딩 객체에 레이아웃 파일에 선언한 클래스 변수 할당

 

 

 


 

데이터 바인딩과 뷰 바인딩

 

 

앞선 포스팅에서 뷰 바인딩에 대해서도 다루어 보았다.

 

 

데이터 바인딩을 사용해보면 느끼겠지만,

뷰 바인딩이 지원하는 기능은 데이터 바인딩도 모두 지원한다.

 

 

 

데이터 바인딩은 뷰 바인딩을 포함하고 있다고 볼 수 있다.

 

 

 

✅ 그럼 뷰 바인딩을 왜 써? 데이터 바인딩만 쓰면 되지

 

 

뷰 바인딩은 비교적 단순한 사용 사례를 처리하기 위해 사용된다.

 

 

● 데이터 바인딩보다 컴파일 시간이 더 짧다.

 

선언형 방식은 컴파일 시간 동안 레이아웃에 작성된 데이터 관련 코드를 처리하기에

뷰 바인딩에 비해 오랜 시간이 걸린다.

 

 

 

사용 편의성이 더 좋다.

 

데이터 바인딩을 사용하기 위해서는 바인딩할 데이터를 xml 파일에 태그하는 등

기본 구조를 미리 설계해야 하기에 더 복잡한 면이 있다.

 

 

 

● 데이터 바인딩 안드로이드 공식 문서에서도 다음과 같이 언급하고 있다.

 

 

 

 

결론적으로 단순한 사용 사례를 적용하려면 뷰 바인딩을,

그것이 아니라면 데이터 바인딩을 채택하는 것을 추천한다.

 

 

 


 

 

 

 

이번 포스팅에서는 데이터 바인딩에 대해 알아보았다.

 

구글에서 권장하는 아키텍처이기도 하고,

그만큼 사용성도 좋다고 느낀다.