View Binding & Data Binding

정여원·2023년 9월 8일
0

[Android]

목록 보기
1/1
post-thumbnail

🤔 View Binding이란?

View Binding을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있으며,
View Binding은 각 XML 레이아웃 파일의 Binding 클래스를 생성합니다.
즉, 간단하게 말하자면 findViewById를 사용하지 않고,
XML의 view component에 접근하는 object를 반환받아 view에 접근하는 방식입니다.

💡 View Binding의 장점

  1. View를 직접 참조하기때문에 존재하지 않는 View id를 참조할 일 X,
  2. 뷰의 개수대로 코드를 추가 할 필요 X
  3. 코드의 가독성 향상
  4. 자바, 코틀린 모두 지원

👩🏻‍💻 View Binding의 사용

1. build.gradle 추가

android{
	...
   
    // Android 4.0 이하
    viewBinding{
    	enabled = true
    }
    
    // Android 4.0 이상
    buildFeatures{
    	viewBinding = true
    }
}
  • 안드로이드 버전에 따라 코드 추가
  • Sync Now 를 누르게 되면 모든 layout에 대해서 binding object가 생성

2. Activity에서 binding 선언

private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }

3. Fragment에서 binding 선언

private lateinit var binding: ActivityMainBinding
override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val binding = FragmentSettingBinding.inflate(inflater, container, false)
    return binding.root
}

🤔 Data Binding이란?

먼저, Data Binding이란 데이터 결합을 의미하며,
레이아웃의 뷰를 결합하여 간단하게 xml파일에 data를 연결해 사용하는 방법입니다.
Activity에서 따로 View를 정의해서 사용하지 않아도 Dataview를 연결시키면
Data 변화할때 따로 세팅해주지 않아도 변경되게 할 수 있습니다.

💡 Data Binding의 장점

  1. 데이터를 UI 요소에 연결하기 위해 필요한 코드 최소화 가능
  2. data가 바뀌면 자동으로 View 변경 가능
  3. 데이터 바인딩은 MVP 또는 MVVM 패턴을 구현하기 위해 유용하게 사용

👩🏻‍💻 Data Binding의 사용

1. build.gradle 추가

android{
	...
    
    // Android 4.0 이하
    dataBinding {
    	enabled true
    }
    
    // Android 4.0 이상
    buildFeatures {
    	dataBidning = true
    }
    
}

2. Activity에서 DataBinding 사용

class MainActivity : AppCompatActivity() {
 
    private lateinit var binding: ActivityMainBinding
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        
        binding.testBtnId.setOnClickListener {
    		Toast.makeText(this, "click", Toast.LENGTH_LONG).show() <- 데이터 바인딩 사용
    	}
    }
}
  • 데이터 바인딩도 뷰 바인딩과 크게 다를 거 X
  • firstName과 lastName을 저장하는 UserProfile 클래스를 만들어 이름 저장

3. layout에서 DataBinding 사용

<layout> <- 레이아웃
  <androidx.constraintlayout.widget.ConstraintLayout...>
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools">
      <data>
      ...
      </data>
      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="vertical">
          <Button
              android:id="@+id/btnSample"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="button"
           />

      </LinearLayout>
  </androidx.constraintlayout.widget.ConstraintLayout>
</layout> <- 레이아웃

👀 View Binding과 Data Binding의 차이점

  • View Binding과 Data Binding 모두 뷰를 직접 참조하는데 사용할 수 있는 바인딩 클래스를 생성하지만 View Binding은 더 빠른 컴파일이 가능해서 보다 단순한 경우에 사용합니다.
  • 데이터 바인딩은 뷰 바인딩의 역할도 할 수 있을 뿐 아니라 Binding Adapter을 제공해 동적 UI 콘텐츠 선언, 양방향 데이터 결합도 지원합니다.

0개의 댓글