본문 바로가기
프로그래밍/App 개발

[android] 데이터바인딩 (데이터결합 라이브러리)

by 엽기토기 2020. 8. 6.
반응형

MVC 패턴과 MVVM의 가장 큰 차이점은 '데이터 바인딩' 이라고 할 수 있다.

간단하게 MVVM에 대해 살펴 보자.

MVVM

- View : 인터페이스 (UI)

- Model : 데이터베이스

- ViewModel : View와 커맨드 또는 데이터 바인딩으로 연결, Model 과 데이터를 주고 받음.

ViewModel 을 통해 클래스들의 의존성을 낮추며 생명주기와 관련된 문제들 (화면회전 등)을 해결할 수 있다.

아래는 안드로이드 스튜디오에서 기본적으로 제공하는 navigation drawer 액티비티를 생성하면 제공된 기본 구조이다.

fragment에서는 ViewModel을 관찰(observe)하고 있다가, 데이터 변경시 UI를 업데이트한다.


아주 간단하게 MVVM 패턴을 살펴보았고, 데이터바인딩을 알아보자

안드로이드 공식 개발 문서이다. 가장 아래 줄만 보면된다.

즉, findViewById()는 UI 프레임워크 메서드로서, 위젯의 속성을 결합할 때 사용한다. 데이터바인딩을 사용하면 이러한 코드를 삭제하여 코드를 '단순화' 시킬 수 있고, 덕분에 '유지관리'가 쉬워진다.

현재 졸업작품 애플리케이션에 데이터바인딩을 적용 중이며, 코드가 훨신 깔끔해졌다.

어떻게 사용하는가?

1. 먼저, build.gradle(app)에 dataBinding을 enable 시키는 코드 작성

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

2. 그다음, 바인딩시키고자 하는 layout xml 파일을 편집

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="Tab2Fragment"
            type="com.example.mymobil.operate.music.Tab2Fragment" />
    </data>

전체 (최상위)에 <layout>으로 래핑한다. 그리고 위 코드처럼 바로 하위 부분에,

<data>
        <variable
            name="Tab2Fragment"
            type="com.example.mymobil.operate.music.Tab2Fragment" />
    </data>

를 넣는다. type은 본 xml과 바인딩하는 java 파일을 기입하고, name은 결합 표현식에서 사용한다.

 

 

3. java 파일 작성

Activity 경우엔

    private FragmentOperateTab2Binding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);

            binding=DataBindingUtil.setContentView(this,R.layout.fragment_operate_tab2);
            binding.setActivity(this);
        }

fragment일 경우엔

  private FragmentOperateTab2Binding binding;

    @Override
    public View onCreateView(
            @NonNull LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_operate_tab2, container, false);
        binding.setTab2Fragment(this);

        return binding.getRoot();
    }

* 바인딩클래스 (FragmentOperateTab2Binding)는 자동으로 생성되는 클래스.

 

이름은 바스칼 표기법으로 작성되는데,

fragment_operate_tab2.xml -> FragmentOperateTab2Binding

이런식으로 생성이 됨

4. 클릭 이벤트 함수 작성

  public void OnClickStart1(View view) {
        start(R.raw.a);
    }

5. xml에서 위젯 클릭 시 발생할 이벤트 함수 연결

<Button
                android:id="@+id/btnStart1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:onClick="@{Tab2Fragment::OnClickStart1}"
                android:text="재생" />

android:onClick="@{Tab2Fragment::OnClickStart1}" 이런식으로 1에서 작성한

name="Tab2Fragment"을 사용한다.

반응형