Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Archives
Today
Total
관리 메뉴

애증의 개발일지

[Android] DataBinding을 사용할 때 NameSpace app과 bind의 차이점(이라 쓰고 차이가 없다고 읽는다) 본문

Android

[Android] DataBinding을 사용할 때 NameSpace app과 bind의 차이점(이라 쓰고 차이가 없다고 읽는다)

Dabing 2023. 1. 7. 21:06

app과 bind

 

DataBinding관련 예제들을 살펴보면, bind라는 xmlns를 활용하는 예제를 많이 봤을 것입니다. 그런데 자세히 살펴보면 xmlns:appxmlns:bind의 URI가 같은 모습을 볼 수 있습니다. 과연 두 xmlns의 차이점은 무엇인지 지금부터 알아봅시다!


xmlns란?

xmlns = xml name space

  • xml name spaces란 각각의 요소들의 네임 충돌을 방지할 수 있는 방법(진짜 말 그대로 NameSpace이다..)
  • 즉, 접두어를 통해 네임 충돌을 해결하는 것
  • 기본 문법 : xmlns:prefix="URI"

ex.

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

여기서 xmlns:android, xmlns:app, xmlns:tools 는 오른쪽에 표기된 URI를 담는 네임스페이스의 역할을 한다. 따라서 해당 네임을 써야만 URI가 보유한 속성에 절대적으로 접근할 수 있는 것은 아니다!(그래도 혼란을 방지하기 위해 default로 많이 사용하는 xmlns:android, xmlns:app, xmlns:tools의 네이밍을 따르자)

여기서 URI들은 모두 패키지이다

 

ex. 아래의 두 코드는 같은 동작을 한다

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
         android:id="@+id/tv_order"
         ...
    />
 <layout xmlns:mdb="http://schemas.android.com/apk/res/android">
    <TextView
         mdb:id="@+id/tv_order"
         ...
    />
  • 보다 자세한 내용은 문서 참조!

app name space

  • xmlns:app="<http://schemas.android.com/apk/res-auto>"
  • 즉, http://schemas.android.com/apk/res-auto URI를 담는 네임 스페이스가 app이다
  • 정확히는 http://schemas.android.com/apk/res/[yourpackage name] 형식으로 작성해야한다.(res-auto일 경우 필요한 속성이 자동으로 추가됨)
  • ex. 레이아웃 매니저 속성 : http://schemas.android.com/apk/res/layoutManager

app(http://schemas.android.com/apk/res/[yourpackage name]) 속성의 용도

  • 사실은 http://schemas.android.com/apk/res 하위의 모든 attribute에 접근할 때 사용
  • 그러나 주로 아래와 같은 용도로 사용한다
    • 하위 버전 대응
    • 커스텀 뷰 생성 시 커스텀 attribute 정의

app vs bind

 

 

xmlns가 이런 식으로 정의되어 있고 DataBinding 관련 예제 코드를 볼 때 bind:~~ 이런 식으로 된 코드를 많이들 보았을 것입니다. 결론부터 얘기하자면 xmlns:app이나 xmlns:bind  http://schemas.android.com/apk/res-auto를 참조하는 name space이기 때문에 둘다 같은 동작을 하게 됩니다. 따라서 xmlns:bind="http://schemas.android.com/apk/res-auto" 는 DataBinding에서 활용하는 attribute를 해당 name space로 관리한다는 걸 명시적으로 보여주기위해서 사용한다고 볼 수 있습니다.

 

app과 bind가 무슨 차이가 있는 지 정확히 알지 못했는데, 이번에 공부를 하면서 거의 차이가 없다는 것(...)을 알게되었습니다! 해당 포스팅이 많은 사람들에게 도움이 되면 좋겠습니다 :)


참고자료

https://velog.io/@odesay97/레이아웃-xml-파일에서-xmlns-코드의-의미는-xml에서의-import-기능

https://stackoverflow.com/questions/28045648/android-layout-when-to-use-app-vs-android

https://stackoverflow.com/questions/56503357/difference-between-using-bind-and-app-namespaces-to-set-a-custom-attribute-w