View Binding(뷰 바인딩)

황제낙엽 2022.11.30 12:09 조회 수 : 116

sitelink1 https://blog.naver.com/sm46384638/222926828305 
sitelink2  
sitelink3  

Viewbinding 이란?​

View와 상호작용하는 코드를 쉽고 간결하게 작성할수있는 것을 말한다.

Viewbinding은 findViewById을 대체할수있는 기능이다.

 

Viewbinding이 나오게 된 이유

안드로이드 스튜디오 3.5 버전 까지는 xml 파일의 view에 접근할때 findViewById을 많이 사용해 왔다. 

하지만 view 하나 하나씩 접근해서 연결해주어야 해서 view가 많아 질수록 코드가 지저분해지고 불편함을 주었다.

이 문제점을 해결해주기 위해 나오게 된게 View binding !!

View binding을 사용하면 모듈에 있는 각 XML 레이아웃 파일에 대해

자동으로 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함된 바인딩 클래스를 생성해주기 때문에 

이것을 이용하면 코드의 가독성이 상당히 개선되게 된다.

 

뷰 바인딩의 장점

● Null-safe : 뷰 바인딩은 서로 다른 레이아웃의 같은 Id를 가진 View를 정확히 구분할 수 있다.

                 그럴 수 없는 경우에는 @Nullable로 만들어 사용할 수 없도록 한다.(NullPointerException을 막을 수 있다.)

● Type-safe : findViewById()를 사용할 경우 View에 잘못된 타입을 지정할 우려가 있으나,

                  뷰 바인딩을 사용할 경우에는 해당 문제가 발생하지 않는다.

 

 

 

Viewbinding 사용법

1. App 수준의 Gradle 에서 viewbinding을 설치 해준다.

android { buildFeatures { viewBinding = true } }

2. Activity 사용

class MainActivity : AppCompatActivity() { private lateinit var binding : ActivityMainBinding // 뷰 바인딩 1 override fun onCreate(savedInstanceState: Bundle?) { binding = ActivityMainBinding.inflate(layoutInflater) // 2 setContentView(binding.root) // 3 binding.name(xmlid값).setText("ji") // 4 binding.number(xmlid값).setText("1234") } }

2-1 자동으로 생성된 바인딩 클래스 이름은 규칙이 있긴 때문에 규칙에 맞게 사용해주어야한다.

ex)

  • button_activity.xml => buttonActivityBinding

  • seung_activity.xml => seungActivityBinding

2-2 inflate 함수를 이용하여 xml에 표기된 레이아웃들을 객체화 시켜준다.

즉, layout에 그때 그때 다른 layout을 집어 넣을 수 있다는 있다는 것

2-3 setContentView(binding.root)

Root View 를 setContentView() 에 전달하여 화면 상의 View로 만든다.

binding.root 란 호출 시 xml에 있는 constraintlayout의 root view를 반환 한다는 의미인데

즉, 이 과정을 겪으면서 해당 레이아웃에 있는 id만 사용할 수 있게 되어 다른 레이아웃에 있는 동일안 이름의 id와 헷갈릴 일이 없어진다.

2-4 바인딩 클래스의 View들 사용가능

binding.(XML Id값).setText("입력할 말"),

binding.button.setOnClickListener { viewModel.userClicked() }

 

번호 제목 글쓴이 날짜 조회 수
108 jetpack compose 란 황제낙엽 2022.12.19 211
107 android jetpack 이란? 황제낙엽 2022.12.19 179
106 구글 ML Kit Vision Quickstart 실행 file 황제낙엽 2022.12.14 95
105 [구글 ML Kit Vision Quickstart 분석] Intro file 황제낙엽 2022.12.13 241
104 Vision API로 카드번호 인식 개발하기(OCR) file 황제낙엽 2022.12.02 126
» View Binding(뷰 바인딩) 황제낙엽 2022.11.30 116
102 view 객체의 eventlistener 함수 정의와 실행 분석 (StillImageActivity.kt) 황제낙엽 2022.11.29 143
101 람다를 활용한 이벤트 리스너 정의 (자바와 코틀린 비교) 황제낙엽 2022.11.29 227
100 [코틀린] 고차함수와 람다함수 file 황제낙엽 2022.11.29 183
99 코틀린 코루틴 관련 포스트 file 황제낙엽 2022.11.29 170
98 [코틀린] 고차함수 황제낙엽 2022.11.28 165
97 MenuInflater 황제낙엽 2022.11.25 104
96 android gradle plugin 의 kotlin_version 수정 황제낙엽 2022.11.22 232
95 android:exported 황제낙엽 2022.11.22 189
94 [Kotlin/Android] DataBinding 황제낙엽 2022.11.13 207
93 startActivityForResult 가 deprecated 된 이유 황제낙엽 2022.11.11 107
92 [코틀린, 카메라 샘플] QRCodeReader (샘플 확인 완료) file 황제낙엽 2022.11.11 223
91 [코틀린, youtube, 안드로이드 앱 만들기] 카메라로 사진 찍기 (샘플 확인 완료) file 황제낙엽 2022.11.11 303
90 용어 사전 황제낙엽 2022.11.04 146
89 Kotlin의 기본 문법 황제낙엽 2022.11.04 376