안드로이드 개발 팁 #9 - 데이터 바인딩/뷰 바인딩 사용하지 않을 경우 자체적으로 만드는 Views 클래스
안드로이드에서 액티비티 클래스를 정의할 때 생기는 문제점 중 하나는요. 뷰들을 사용하기 위해 일일이 findViewByID 메소드를 호출해야 하는 점입니다. 그렇게 작성한 코드 또한 boilerplate code이고요. 코드의 가독성을 크게 떨어뜨리는 원인 중 하나입니다. 데이터 바인딩이나 뷰 바인딩을 사용하면, findViewById 메소드를 호출할 필요가 없어 편리하지요.
그런데 단순한 샘플을 구현하는데 데이터 바인딩이나 뷰 바인딩을 굳이 사용할 필요는 없습니다. 샘플의 핵심은 필요한 기능의 이해인데, 바인딩을 모르는 분들도 계실 수 있죠. 이를 사용하지 않고도 액티비티 클래스를 깔끔하게 만들 방법은 없을까 고민했습니다. 제가 내린 결론은 액티비티 클래스 안에 Views 클래스를 만드는 것입니다.
액티비티 클래스 안에 Views 클래스 만들기
단순히 뷰들을 담는 Views 클래스를 액티비티 클래스 안에 만듭니다. 뷰들을 이 클래스의 주생성자의 파라메터로 추가하구요. 디폴트 값으로 findViewById 메소드가 호출한 값들을 지정합니다. Views 객체는 by lazy {...} 구문을 활용하여 뷰 접근시 생성하면 됩니다. findViewById 메소드는 여전히 사용하지만, 뷰 접근 코드를 onCreate 메소드가 아닌 Views 내부 클래스 안에 작성되어 보다 깔끔한 구조를 만들 수 있습니다.
class MainActivity : AppCompatActivity() {
val views by lazy {
Views()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
views.tvExample.setText("Hello, world.")
}
inner class Views(
val tvExample: TextView = findViewById(R.id.tvExample)
)
}
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Upvoted! Thank you for supporting witness @jswit.