본문 바로가기
Android/UI

[Android] ViewBinding

by startSW 2023. 9. 25.

뷰 바인딩(View Binding)은 안드로이드 앱 개발에서 XML 레이아웃 파일의 뷰들을 바인딩하여 코드에서 뷰를 더 효율적으로 조작할 수 있게 해주는 도구입니다. 이 글에서는 안드로이드 뷰 바인딩을 소개하고, 어떻게 사용하는지에 대해 알아보겠습니다.

뷰 바인딩이란?

뷰 바인딩은 안드로이드 스튜디오 3.6 버전부터 도입된 기능으로, 기존의 findViewById나 Kotlin Android Extensions 대신 XML 레이아웃 파일에 정의된 뷰들을 직접 바인딩하여 사용할 수 있게 해줍니다. 이를 통해 뷰를 더 안전하고 효율적으로 조작할 수 있으며, 레이아웃의 계층 구조나 뷰의 타입 안정성도 보장받을 수 있습니다.

뷰 바인딩 설정

뷰 바인딩을 사용하려면 다음과 같이 설정해야 합니다.

뷰 바인딩 활성화: 앱 모듈의 build.gradle 파일에 다음과 같이 뷰 바인딩을 활성화합니다.

android {
    ...
    buildFeatures {
        viewBinding = true
    }
}

뷰 바인딩 사용하기

뷰 바인딩을 활성화하고 설정한 후, 이제 뷰를 XML 레이아웃 파일로부터 바인딩하여 사용할 수 있습니다. 예를 들어, 다음과 같은 XML 레이아웃 파일(activity_flashlight.xml)이 있다고 가정해봅시다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".presentation.FlashlightActivity">

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/flashlightButton"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@drawable/off_button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

이 레이아웃을 바인딩하려면 다음과 같이 코드에서 사용합니다.

class FlashlightActivity : AppCompatActivity() {

    private var _binding: ActivityFlashlightBinding? = null
    private val binding get() = _binding!!

    private val viewModel: FlashlightViewModel by lazy {
        ViewModelProvider(this)[FlashlightViewModel::class.java]
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        _binding = ActivityFlashlightBinding.inflate(layoutInflater)
        val view: View = binding.root
        setContentView(view)

        initViews()
    }

    override fun onDestroy() {
        super.onDestroy()
        _binding = null
    }

    private fun initViews() {
        binding.flashlightButton.setOnClickListener {
            Log.d("FlashlightActivity", "flashlightButton clicked")
        }
    }
}

뷰 바인딩을 사용하면 binding 객체를 통해 XML 레이아웃 파일에 정의된 뷰들에 접근할 수 있으며, 타입 안정성을 보장받을 수 있습니다.

장점

뷰 바인딩을 사용하면 다음과 같은 이점을 얻을 수 있습니다:

  1. 타입 안정성: 뷰 바인딩을 사용하면 컴파일 타임에 레이아웃 내의 뷰에 대한 타입 안정성을 보장받을 수 있습니다. 따라서 런타임 오류를 줄일 수 있습니다.
  2. 성능 향상: findViewById를 사용하지 않기 때문에 뷰 바인딩은 레이아웃의 계층 구조를 한 번만 탐색하면 됩니다. 이로 인해 앱의 성능이 향상됩니다.
  3. 코드 가독성: XML 레이아웃 파일의 뷰들을 직접 참조할 수 있으므로 코드의 가독성이 향상됩니다.
  4. 리소스 아이디 관리: 뷰 바인딩은 리소스 아이디를 자동으로 생성하므로 리소스 아이디의 충돌을 방지합니다.

결론

안드로이드 뷰 바인딩은 안드로이드 앱 개발을 더 효율적으로 만들어주는 강력한 도구입니다. XML 레이아웃 파일과 코드를 더 쉽게 연결하고, 타입 안정성을 향상시키며, 성능을 향상시키는 데 도움이 됩니다. 이를 통해 안드로이드 앱의 개발과 유지 보수가 더 쉬워집니다.