공상하는 개발자

[Android/kotlin] DataBinding 파헤치기 본문

개발/안드로이드

[Android/kotlin] DataBinding 파헤치기

공상과학소설 2020. 2. 9. 22:35
반응형

DataBinding이란?

데이터 바인딩은 xml의 위젯 등에 접근할 때 findViewById()를 쓰지 않고 자동으로 View에 연결시켜준다.

 

DataBinding을 쓰는 이유는?

  1. 귀찮은 logic들을 xml로 뺄 수 있게 해준다.
  2. View 자체에서 데이터 변경에 대한 동적 처리가 가능하다.
  3. View와 ViewModel의 분리에 용이함. (MVVM 패턴에 적용)

단점 : 빌드 시간이 오래 걸린다. 클래스들이 많이 만들어져서 그렇다.

 

DataBinding을 사용하기 위한 설정

android {
   
   //..
   
      dataBinding {
        enabled = true
    }
    
   //..
   
}

DataBinding enabled를 true로 설정하면 DataBinding을 쓰기 위한 설정은 끝!

 

xml에 DataBinding 적용하기

기본으로 xml을 만든 모습

 

여기서 Layout에 클릭하고 mac으로는 option+enter를 누르면 간편하게 데이터 바인딩 모드로 바꿀 수 있다.

 

xml DataBinding 적용 

option+enter를 시전한 모습

 

Convert to data binding layout 을 클릭한다.

 

 

DataBinding 적용된 xml

layout 태그가 만들어지면서 DataBinding 설정이 가능하다.

바깥이 layout 태그로 싸이고 그 안에 data 태그가 만들어졌다.

 

 

더하기 기능 xml 작성

DataBinding 적용 xml

간단한 더하기 기능을 구현하는 xml을 짜보았다. 두 개의 EditText에 숫자를 넣고 버튼을 클릭하면 Toast로 더해진 숫자를 출력하는 프로젝트이다.

이 프로젝트에 DataBinding을 적용시켜보자.

 

Variable 추가

plusActivity와 plusResult variable을 만들었다.

 

 

import를 이용해서 type의 길이를 줄일 수 있다.

 

plusActivity : MainActivity 타입의 variable (onclick에 MainActivity의 메서드를 연결하기 위해서 만듦)

plusResult : 두 editText의 더한 값을 저장하려고 만듦.

 

속성에 variable 값 사용하기

버튼 클릭 시 plusActivity의 plusClick 메소드 호출

 

Button의 onClick 속성에 데이터 바인딩 메서드(plusClick()) 를 xml에서 바로 연결이 가능하다.

단방향 데이터바인딩은 @{} , 양방향은 @={} 식으로 나타낸다.

 

kotlin 클래스에 DataBinding 적용

MainActivity에 DataBinding 적용

 

1. DataBinding을 적용시키면 해당 xml 이름에 맞는 Binding 클래스가 생성된다

-> activity_main xml에 데이터 바인딩을 적용시켜서 ActivityMainBinding 이 만들어진다.(파스칼 표기법 기준)

 

2. 생성된 바인딩 클래스를 DataBinidngUtil 객체의 setContentView 메서드를 이용해서 xml과 연결시킨다.

 

3. xml에서 생성했던 variable들을 해당하는 것들에 연결시켜준다.

-> 연결시켜 줄 때 해당 Binding 클래스.아이디값 으로  호출한다. 예를 들어 위젯의 아이디가 et_firstNumber 였다면                   binding.etFirstNumber로 불러온다. (카멜 표기법 기준) 

-> findViewById()가 필요 없다.

 

파스칼 표기법, 카멜 표기법이 궁금하다면? 

 

카멜표기법 camelCase, 파스칼표기법 PascalCase - 제타위키

다음 문자열 포함...

zetawiki.com

결과 화면

결과가 잘나오는 걸 볼 수 있다.

 

결론

되게 간단한 예제로 접근했는데 만약 recyclerview 같은 것에서 데이터 클래스의 속성 값들을 넣고 싶을 때도 DataBinding을 이용하면 매우 효율적이고 간결한 코드를 짤 수 있다. variable에 데이터 클래스를 추가해서 그 속성 값을 위젯에 연결시켜주면 된다. 다음에 기회가 된다면 이에 대해서도 포스팅을 해보겠다. DataBinding을 이용해서 findViewById()가 없는 프로젝트를 만들어보길 바란다.

반응형
Comments