본문 바로가기
개발

안드로이드 코틀린 : viewbinding

by kks950115 2024. 1. 5.
728x90

xml 안에 있는 엘리먼트에 접근하려면 findViewById (R.id.textViewId) 와 viewbinding 을 사용할 수 있다.

 findViewById 은 수동,  viewbinding 은 자동 이라고 생각하면 편하다.

둘 다 사용하면 되는거 아니야? 라고 생각할 수 있지만 viewbinding 사용을 권장한다.

왜일까?

 

 findViewById는 직접 프로그래머가 지정하는 것이다. 그러다보니  실제 동작과 의도가 다를 경우 예외를 발생시킬 수 있다.

예를 들어 해당 엘리먼트를 찾을 수 없어 null예외가 발생한다거나 예상한 것과 다른 타입이 들어와서 ClassCast 예외를 일으킬 수 있다.

 

반면  viewbinding은 xml뷰를 객체로 만들어 처리하기 때문에 번거롭게  findViewById 로 하나하나 지정해 줄 필요 없다. 형타입 문제 역시 컴파일 단계에서 알 수 있기 때문에 viewbing을 하는 것이 편하고 예외도 예방할 수 있다.

 

다음은 viewbinding을 설정하는 방법이다.

 

 

build.gradle.kts

android {
   
    buildFeatures {
        viewBinding = true
    }
}

 

 

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) } // 요 부분 추가. ActivityMainBinding 부분은 해당 클래스이름에 따라 바뀐다. 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root) // R.layout.activity_main을 binding.root로 변경
        
 		binding.tvPlace.text="asdf" //지정한 바인딩 변수.xml아이디 속성.~~ 이런 식으로 쓰면 된다.
    }
}

 

728x90
반응형

댓글