티스토리 뷰


데이터 바인딩이란?

데이터 바인딩은 두 데이터 혹은 정보의 소스를 모두 일치시키는 기법을 말합니다. 즉, 화면에 보이는 데이터와 서버, 브라우저 메모리에 있는 데이터를 일치시키는 경우를 말합니다.
안드로이드 경우에는 화면에 보여지는 XML에서의 데이터와 내부 동작 코드(자바 코드)에 있는 데이터를 일치시키는 기법을 말합니다.


findViewById() 방식! 너무 길고 반복적이다!!

그럼 왜 데이터 바인딩이 필요할까요?
이를 알려면 XML과 액티비티의 데이터를 일치시키기 위해 원래 어떤 식으로 코드를 작성했는지를 알 필요가 있습니다. AAC에 데이터 바인딩 라이브러리가 생기기 전에는 자바 코드에서 뷰 객체를 핸들링해야 하는데, 이 부분이 상당히 길며 대부분 반복적인 코드입니다.

기존 방식인 findViewById 함수로 뷰를 핸들링 하는 방법을 먼저 보시겠습니다.

 

layout xml 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <TextView
        android:id="@+id/helloTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
 
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>
cs

MainActivity 액티비티 코드 (자바 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    TextView helloTextView;
    Button button;
    public String helloResult = "Hello World~!";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        helloTextView = findViewById(R.id.helloTextView);
        button = findViewById(R.id.button);
 
        helloTextView.setText(helloResult);
 
        button.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this"show toast...", Toast.LENGTH_SHORT).show();
    }
}
cs

 

위 액티비티 코드를 보면 helloTextView와 button을 findViewById를 통해서 xml에서 뷰 객체를 획득하고 획득한 뷰 객체에 helloResult(String)을 등록하고 button에 이벤트를 등록해줘야 합니다.

 

위 예제에서는 뷰가 두 개 밖에 없지만 뷰가 계속 늘어난다면 많은 양의 반복되는 코드가 늘어날 것입니다. 


데이터 바인딩 방식! 왜 이제서야 왔니..


결론부터 말씀드리자면 데이터 바인딩 방식은 데이터를 대입하고 이벤트를 등록하던 자바 코드를 XML로 옮기는 개념입니다. 뷰와 관련된 코드는 아예 XML로 몰아버리고 자바 코드에는 데이터를 생산하는 업무 로직 중심의 코드만 남기자는 것이 목적이죠.

이제 데이터 바인딩 방식을 활용하는 코드를 알아봅시다.

activity_main.xml - 데이터 바인딩

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="myData"
            type="com.weekyear.practice.MainActivity" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
        <TextView ...
            android:text="@{myData.helloResult}" />
 
        <Button ...
            android:onClick="@{myData::onButtonClick}"/>
    </LinearLayout>
</layout>
cs

데이터 바인딩을 이용하기 위한 XML은 루트 태그를 <layout>을 선언해야 합니다. <layout> 태그를 선언하게 되면 자바 코드에서 별도의 작업없이 XML에 정의한 뷰 객체를 바로 이용할 수 있습니다.

또한 <data> 태그를 선언하면 코드의 데이터가 자동으로 XML의 뷰 객체에 대입됩니다. 위 예시에서는 <data> 태그 내에 myData라는 이름의 <variable>을 선언하였습니다. 이후에는 myData를 통해서 원하는 데이터를 XML에서 활용할 수 있습니다.

MainActivity.java - 데이터 바인딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MainActivity extends AppCompatActivity {
    ActivityMainBinding binding;
    public String helloResult = "Hello World~!";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        binding.setMyData(this);
    }
 
 
    public void onButtonClick(View v) {
        Toast.makeText(MainActivity.this"show toast...", Toast.LENGTH_SHORT).show();
    }
}
cs

데이터 바인딩을 이용하면 XML의 파일명에 따라 ActivityMainBinding과 같은 클래스가 자동으로 만들어집니다. 그리고 setcontentView() 함수를 이용하여 XML을 초기화하고 해당 XML을 이용하기 위한 바인딩 클래스의 객체를 반환하여 binding에 할당합니다.

그리고 XML에 데이터를 대입하기 위해 binding.setMyData(this); 코드를 실행시켜 줍니다.

 

즉, 데이터 바인딩이라는 것은 화면을 XML로 작성한다면 그 화면의 데이터 처리와 이벤트 처리 등도 XML에 작성해서 자바 파일에는 해당 데이터를 위한 작업 중심의 코드만 작성하자는 개념입니다!!

 


참조 - 깡샘의 안드로이드 프로그래밍 27장 <데이터 바인딩>

더욱 자세한 내용은 [깡샘의 안드로이드 프로그래밍] 책을 확인해주시기 바라요!! 툭 까놓고 말해 제가 공부한 것을 적어두자는 목적으로 쓴 글이라 큰 도움이 안 될 수 있습니다. 책이나 안드로이드 공식 문서를 확인하는 것이 가장 좋은 공부법입니다!!

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함