안드로이드 버전 3.5 까지는 findViewById를 사용했었다.
3.5이하 버전에서는 Butter knife 라이브러리나 extension을 이용하여 findViewById의 불편함을 해결했다고 한다.
3.6버전에 들어서면서 ViewBinding 기술이 도입되게 되었다.
ViewBinging -> 직접 id를 적고 타입을 정하는 작업을 하지 않아도 되며, 자동으로 클래스 파일을 생성해준다.
4.1 버전 이후에 문제점으로 인해 ViewBing이 사용되지 않는다한다.
그 이유는 다음과 같다.

먼저 위 그림과 같이 Gradle에 android안에 구문을 추가해주어야한다.
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// layout의 tv_name을 낙타체로 표기
binding.tvName.setText("안녕하세요.")
// layout의 tv_test를 낙타체로 표기
binding.tvTest.setText("하이이ㅣ이")
위 코드를 쪼개서 조금씩 설명해보겠다.
private lateinit var binding : ActivityMainBinding
lateinit은 단순히 늦은( late ) 초기화( initialize )를 의미한다.
-> 별도의 값 부여 X, 타입만 지정하고 실제 초기화를 내가 원하는 지점에 하고싶을 때, lateinit을 사용한다.
이 때, 주의해야할 것이 있다.
Layout 이름이 MainActivity일 경우 -> AcitivityMainBinging
Layout 이름이 HolyActivity일 경우 -> ActivtyHolyBinding
처럼 바인딩 클래스 이름은 규칙이 정해져 있다.
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
inflate(layoutInflater)는 xml에 있는 뷰를 객체화해준다고 생각하면 된다.
원래는 R.layout.activity_main을 넘겨주지만 ViewBinding에서는 생성한 루트 뷰를 넘겨준다.
// layout의 tv_name을 낙타체로 표기
binding.tvName.setText("안녕하세요.")
// layout의 tv_test를 낙타체로 표기
binding.tvTest.setText("하이이ㅣ이")
그렇기 때문에 바인딩 된 객체 안에 있는 tvName과 tvText를 사용하여 접근해주면 된다.