Kotlin/개념 정리

개념 정리 : 뷰 바인딩

바보인간 2023. 2. 17. 19:53

1. 정의

안드로이드 앱 개발에서 사용되는 기술 중 하나로, XML 레이아웃 파일에서 정의된 뷰 객체를 가종으로 바인딩하는 방식을 말한다.

뷰 바인딩은 안드로이드 SDK의 업데이트와 함께 점차 발전하였다.

 

1-1. 변천사

1) SDK 26 이전 버전

findViewById만 사용 가능하던 암울하던 시기이다. 

class MainActivity : AppCompatActivity() {
    private lateinit var mTextView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mTextView = findViewById(R.id.textView)
        mTextView.text = "Hello, World!"
    }
}

지금 보기에는 좀 단순해 보이나 실제로 연결해야 하는 객체 수가 많아지면 findView가 우수수 늘어나는 진풍경을 볼 수 있다.

 

2) SDK 26-28 버전

뷰 바인딩이 도입되었다. build.gradle에 의존성을 추가하고, 바인딩할 뷰 객체를 <data> 태그로 감싸주고, 데이터 바인딩과 마찬가지로 바인딩 클래스를 생성해야 했다.

class MainActivity : AppCompatActivity() {
    private lateinit var mBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(mBinding.root)

        mBinding.textView.text = "Hello, World!"
    }
}
<layout>
    <data>
        <variable name="text" type="String" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{text}" />
    </LinearLayout>
</layout>

 

3) SDK 29 이후 버전

뷰 바인딩이 좀 더 간단해졌다.

viewBinding 속성을 true로만 설정하고, 이후에는 바인딩할 뷰 객체를 <layout> 태그로 감싸주고 사용하면 된다.

class MainActivity : AppCompatActivity() {
    private lateinit var mBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(mBinding.root)

        mBinding.textView.text = "Hello, World!"
    }
}
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:text="Hello, World!" />

</LinearLayout>

코드는 같으나 XML 파일이 달라진 것을 알 수 있다.

그냥 원래대로 사용하는 방식으로 혼동 없이 사용할 수 있게 되었다!

 

2. 사용 방법

viewBinding 사용 방법은 아래 순서대로 하면 된다.

 

2-1. build.gradle 파일에 라이브러리 의존성 추가하기

android {
    ...
    buildFeatures {
        viewBinding true
    }
}

dependencies {
    ...
    implementation 'com.android.support:appcompat-v7:VERSION'
    implementation 'androidx.constraintlayout:constraintlayout:VERSION'
}

 

2-2. XML 레이아웃 파일에서 바인딩할 뷰 객체 정의하기

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

id가 필수라는 것만 명심하면 된다.

 

2-3. 뷰 바인딩 클래스 생성하기

private lateinit var binding: MainActivityBinding
binding = MainActivityBinding.inflate(layoutInflater)
setContentView(binding.root)

본문에 추가하면 된다.

 

2-4. 뷰 객체 사용하기

binding.textView.text = "Hello, World!"

이걸로 간단하게 완료!