findViewById 를 쓰지 않고, XML의 view component에 접근하는 object를 반환받아
view에 접근하는 방식이다.
👉🏻 단순히 findViewById를 대체하기 위한 방법으로만 사용된다.
👩🏻🏫 양방향 데이터 바인딩?
viewModel의 데이터를 layout에 연결하여 UI에 바로 나오게끔 하면서,
반대로 화면에서의 입력이 viewModel의 데이터에 영향을 주는 연결 방식
android{
...
// Android 3.6 ~ 4.0
viewBinding{
enabled = true
}
// Android 4.0 ~
buildFeatures{
viewBinding = true
}
}
안드로이드 버전에 따라 코드를 추가해준다.
Sync Now
를 누르게 되면 모든 layout에 대해서 binding object가 생성된다.
binding object는 id를 갖는 모든 view들을 하나의 property로 가진다.
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = FragmentSettingBinding.inflate(inflater, container, false)
return binding.root
}
binding.textView.text = "Hello, World!"
xml 이름이 카멜
표기법으로 변경되어 코드에 사용된다.
위 그림에서 보시다시피 다른 라이브러리에 비해 view binding의 장점이 더 많은 것을 확인할 수 있다.
필자는 이전에 findViewById 선언 없이 xml id에 바로 접근할 수 있도록 하는 kotlin synthetics을 사용했었는데 어떤 이유에서 deprecated 됐을까?
위와 같은 문제때문에 deprecated 되었으니, view binding을 사용하길 권장한다.
view binding 에 대해서 알아보았는데, 이전에 공부를 하지않고 무작정 쓰던때와 다르게 왜 써야되는지 알면 확실히 더 잘 이해할 수 있는 거 같다.
잘못된 부분 수정이나 질문은 언제든 남겨주세요 ~ 😁
View Binding
Android view binding (뷰 바인딩)
안드로이드 뷰 바인딩(view binding)