[Android] ViewBinding vs DataBinding

유정현·2024년 1월 17일
0

findViewById()

처음 안드로이드를 학습할 때 보통 findViewById()를 사용해 일일이 view 요소의 id를 가져왔다. 이 방식은 view 요소가 많아지면 findViewById() 호출 횟수가 늘어나 코드의 길이가 증가하며 id를 잘못 입력하면 NullPointer 에러가 발생할 수 있다.

val txt1 = findViewById<TextView>(R.id.tv_1)

ViewBinding?

  • 각 XML layout 파일의 binding 클래스를 생성하며 view와 상호작용하는 코드를 쉽게 작성할 수 있다.
  • ViewBinding은 null safety하며(id를 잘못 작성해 발생하는 에러 없음) type safety(view type이 일치함)하다.
    즉, ViewBinding은 Actvity또는 Fragment에서 xml의 view를 참조하기 위해 사용한다.
// Activity
private var _binding: ActivityViewBindingBinding?= null
    private val binding get() = _binding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        _binding = ActivityViewBindingBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.tvViewBinding.text = "success"
    }

DataBinding?

DataBinding은 xml에서 view에 직접 데이터를 할당하기 위해 사용하는 Android Jetpack 라이브러리의 구성 요소이다.

// Activity
class DataBindingActivity : AppCompatActivity() {
    private lateinit var binding : ActivityDataBindingBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = DataBindingUtil.setContentView(this, R.layout.activity_data_binding)
        binding.dataBinding = DataBindingModel("Data Binding Text")
    }
}

data class DataBindingModel(
    val stringData: String
)
<-- xml -->
<layout>
    <data>
        <variable
            name="data_Binding"
            type="com.example.binding.DataBindingModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout 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"
        tools:context=".DataBindingActivity">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@{data_Binding.stringData}"
            android:gravity="center"/>

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

ViewBinding vs DataBinding

ViewBinding과 DataBinding의 차이는 무엇일까요?

ViewBinding은 Actvity또는 Fragment(코드)에서 xml의 view를 참조하기 위해 사용하며,
DataBinding은 xml에서 view에 직접 데이터를 할당하기 위해 사용한다.

  • ViewBinding의 속도가 더 빠르며(databinding과 관련한 overhead 및 성능 이슈를 피할 수 있어 빌드 시간이 적게 소요됨), 양방향 binding 방식이 아니다.
  • DataBinding은 태그를 사용하는 레이아웃을 사용한다.

0개의 댓글

관련 채용 정보