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!"
이걸로 간단하게 완료!