일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- linksClickable
- 하이퍼링크
- BIND
- 네트워크 인스펙터
- DataBinding
- app
- Photo Picker
- TextView
- Android
- 네트워크 위변조
- network inspector
- Android13
- 네트워크 디버깅
- autolink
- 안드로이드
- xmlns
- textColorLink
- Today
- Total
애증의 개발일지
[Android] DataBinding을 사용할 때 NameSpace app과 bind의 차이점(이라 쓰고 차이가 없다고 읽는다) 본문
[Android] DataBinding을 사용할 때 NameSpace app과 bind의 차이점(이라 쓰고 차이가 없다고 읽는다)
Dabing 2023. 1. 7. 21:06app과 bind
DataBinding관련 예제들을 살펴보면, bind라는 xmlns를 활용하는 예제를 많이 봤을 것입니다. 그런데 자세히 살펴보면 xmlns:app과 xmlns: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
'Android' 카테고리의 다른 글
[Android] Network Inspector로 쉽게 네트워크 디버깅하기 (1) | 2024.07.07 |
---|---|
[Android] TextView 속성 autoLink, linksClickable, textColorLink에 대해 알아보자!(하이퍼 링크를 쉽게 구현하자) (0) | 2022.12.08 |
[Android Studio] Dolphin 버전에서 Layout Editor가 제대로 작동하지 않는 버그 (0) | 2022.10.15 |
[Android 13] Photo Picker에 대해 알아보자 (4) | 2022.10.15 |