[Android/Java] ACC - DataBinding

Happy Jiwon·2022년 12월 30일
1

Android

목록 보기
1/13
post-thumbnail

시작하기 전...

안드로이드를 배우면 초반에 findViewById()를 많이 쓰는데
이 findViewById()는 런타임시 뷰의 계층을 타고타고 들어가는 비효율적인 함수이다.

간단한 앱에서는 괜찮았지만, 앱이 커지면 효율이 떨어진다 😢
Data Binding을 사용하면 쉽게 View에 접근할 수 있고, 코드도 간결해진다!!
또한 MVVM 아키텍쳐에서 주로 사용하는 방법이기도 하다.

Data Binding에 대해 적어볼까 한다.


1. Data Binding

포괄적인 의미로 앱 UI와 해당 UI가 표시하는 데이터를 연결하는 프로세스이다.
바인딩 설정이 올바르고 데이터가 적절한 알림을 제공하는 경우 데이터 값이 변경될 때 데이터에 바인딩 된 요소에 변경 사항이 자동으로 반영된다.

즉, 데이터 바인딩(Data Binding)은 UI 요소와 데이터를 프로그래밍적 방식 으로 연결하지 않고, 선언적 방식으로 결합할 수 있게 도와주는 라이브러리이다.

사용자가 TextBox 요소의 값을 편집하면 내부 데이터 값이 자동으로 업데이트 되어 해당 변경 내용이 반영된다.

사용해보기 전에 프로그래밍적 방식과 선언적 형식이 무엇인지 부터 알아보자!!

🤔 프로그래밍적 방식 vs 선언적 형식

프로그래밍적 방식이란?

  • 프로그래밍적 방식이라 하면 기존 코드 내에서 UI 요소를 가져와 findViewById() 로 데이터와 결합해준 후 데이터를 할당하는 방식이다.

선언적 형식이란?

  • 선언적 형식은 코드 내에서 UI 요소를 호출할 필요없이 레이아웃 파일(xml)에서 직접 할당해주는 방식이다.

말로는 바로 와닿지 않으니... 간단한 예제를 통해 사용해볼 예정이다.

2. Data Binding 사용

1.프로그래밍적 방식(기존 명령형 방식)

imperativeBtn = findViewById(R.id.imperative_btn);
imperativeBtn.setText("imperativeBtn");
imperativeBtn.setOnClickListener(view -> {
    // something...
});
<Button
android:id="@+id/imperative_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

2. 선언형 방식

1. gradle 설정

build.gradle(Module:app) 내부 android {…} 태그 사이에 아래 코드 추가해준다.

dataBinding {
	enabled = true
}

🖐🏻 이때 안드로이드 버전이 4.0 이상이라면 아래 코드를 사용해준다.

  android {
    ...
    buildFeatures {
        dataBinding = true
    }
}

2. POJO(Model) 설정

public class User {
	private final String name;
	private final int age;

	public User(String name, int age) {
	  this.name = name;
	  this.age = age;
	}

	public String getName() {
  return name;
	}

	public int getAge() {
  return age;
	}
}

User 클래스에 2개의 Getter 메서드가 존재한다. 이 Getter 메서드는 XML 에서
@{user.age}= getAge(), @{user.name} = getName() 으로 엑세스 된다.

3. XML 수정

xml 레이아웃을 <layout> </layout> 태그로 감싸준다.

선언되어있는 Layout에서 Alt + Enter를 누르면 나오는 Converter to data binding layout 선택!!!!


<data> </data> 태그 사이에 <variable> 태그를 사용하여 해당 xml 내부에서 사용할 수 있는 변수 할당한다.!!

<data> 태그로 선언한 변수는 "@{}" 구문을 이용해 view의 속성값에 대입하여 사용할 수 있다.

💡 사용 가능한 표현식의 종류 확인하러 가기!!
3항 연산자 같은 간단한 식을 넣을 수 있지만, 이 표현식은 단위 테스트가 불가능하고 IDE 지원이 제한적이기 때문에 아주 간단한 식을 사용하기 적절하다.

4. 데이터 결합

기본적으로 클래스 이름은 레이아웃 파일 이름을 기반으로 하여 파스칼 표기법으로 변환하고 binding을 추가한다.
_ex) activity_main.xml 파일 사용 시 -> ActivityMainBinding 클래스가 자동으로 생성된다.

⭐ 즉, Data Binding은 각 레이아웃 xml 마다 binding class를 자동으로 생성!!!

기본적인 사용방법은 여기서 끝!


3. WHY Data Binding?

데이터를 UI 위젯에 연결하기 위한 코드를 최소화 할 수 있기 때문이다!!!

  • findViewById() 를 사용하지 않고 자동으로 XML에 있는 View를 생성 하여 비효율성을 개선함
    ==> 앱의 Performance 상승 ⬆️

  • 레이아웃 파일에서도 View에 어떤 데이터가 들어가는지 파악할 수 있다.

  • 코드가 간결해짐
    ==> 가독성⬆️, 유지보수 쉬워짐

  • 데이터의 변화에 따라 자동으로 View를 변경하게 할 수 있다.(Observer 사용시)

  • 파일이 단순화되어 유지 관리가 쉬워지고 메모리 누수 방지, null 위험을 방지할 수 있다.

  • MVVM 아키텍쳐의 ViewModel과 함께 사용하기 좋다


다음에는 Kotlin으로 작성해서 올려야지><!

profile
공부가 조은 안드로이드 개발자

0개의 댓글