View Binding(뷰 바인딩)

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

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() }