본문 바로가기
Android

[Android] DataBinding(ViewBinding) 적용법

by 워뇨옹2 2021. 10. 9.
728x90
반응형

DataBinding

build.gradle: Module
...

buildFeatures {
    dataBinding true
}

....

Gradle에 dataBinding을 적용해준 뒤, 액티비티의 레이아웃 코드를 다음과 같이 바꿔준다.

 

<RelativeLayout
	....>
    
</RelativeLayout>

아래와 같이 바꿔준다.

<layout>
	<RelativeLayout
    	....>
       
    </RelativeLayout>
</layout>

 

마지막으로 액티비티의 코드를 수정

 

class MainActivity : AppCompatActivity() {

	lateinit var binding: ActivityMainBinding
	override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
    }
}

이때 binding의 타입은 해당 액티비티의 레이아웃 파일 이름에따라 달라진다.

현재 MainActivity의 레이아웃 파일 이름은 activity_main.xmll이다.

 

그렇다면 binding의 타입은 activity -> Activity, _ 제거, main -> Main + Binding이 된다.

 

예를들어 액티비티의 레이아웃 이름이 search_activity.xml 이라면

activity -> Activity,

_ 언더바 제거,

search -> Search

=> ActivitySearchBinding이 된다.

 

이렇게 바인딩을 해두면, findViewById를 일일히 사용하지 않고 binding.아이디 와 같이 접근할 수 있다.

 

지금 과정은 정확히는 데이터바인딩이 아니라 뷰바인딩만 한 상태이다.데이터 바인딩까지 적용해주면 프로그램적으로 위젯에 값을 넣지 않고 view에서 변수의 값을 읽어서 스스로 값을 받아가게 할 수도 있다.

 

재작년까지만해도 코드에서 바로 아이디에 접근하는 기능을 제공해줬는데,어느샌가부터 적용이 안되기 시작하더니 지금은 아예 못쓰게 해놓은 것같다.

 

처음에는 불편했지만, MVVM을 공부하며 데이터바인딩을 사용해본 결과, 확실히 코드도 깔끔해지고 생각보다 어렵지 않게 사용할 수 있다는 점이 마음에 들었다. (물론 디자인패턴을 말하는 건 아니다... 넘 어렵..)

 

 

 

 

 

728x90
반응형