[안드로이드] 뷰 바인딩이 뭐에요? feat. findViewById와 비교

0

Android

목록 보기
1/16
post-thumbnail
post-custom-banner

뷰 결합(View Binding)

안드로이드 스튜디오 3.6 이상 버전에서 부터 나온 XML 뷰와의 상호작용 을 위한 기술입니다. 기존의 findViewById에서 안정성을 강화 하였습니다.

사용하는 법

앱수준 build.gradle 설정

앱수준의 build.gradle의 android 필드 안에 다음과 같은 코드를 넣어 주셔야 합니다.

android {
	// 생략..
    buildFeatures {
        viewBinding true
    }
	// 생략..
}

뷰 바인딩 인스턴스를 생성한 후 루트뷰 활성화

class MainActivity : AppCompatActivity() {
    
    // 결합 클래스 인스턴스화 (결합 클래스명은 카멜표기법을 따른다.)
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 결합 클래스에 포함된 정적 inflace() 메서드 호출
        binding = ActivityMainBinding.inflate(layoutInflater)
        // 루트뷰를 setContentView()에 전달하여 활성뷰로 만듬
        setContentView(binding.root) 

        
    }
}

뷰 바인딩으로 뷰 컴포넌트 불러오기

다음 코드와 같이 binding을 사용하여 버튼을 호출하고 Toast 메세지를 띄웁니다.

binding.button.setOnClickListener {
	Toast.makeText(this, "with ViewBinding.", Toast.LENGTH_LONG).show()
}

뷰 바인딩은 왜 사용하나요? (findViewById와의 차이점)

뷰 바인딩은 기존의 findViewById에서 안정성과 보일러 플레이트 코드를 개선한 기술입니다. 그렇기 때문에 뷰 바인딩은 다음과 같은 이점이 있습니다.

1. 보일러 플레이트 코드 개선

findViewById를 사용하면 뷰를 참조할 때 다음과 같은 코드를 사용해야 합니다.

val button = findViewById<Button>(R.id.button)

만약 뷰가 20개 있다면? 20줄을 저런식으로 거창하게 써야합니다.

반면, 뷰 바인딩을 사용하면 button변수 선언 없이 바로 뷰에 접근할 수 있습니다.

2. null 안정성

findViewById를 사용할 때면 뷰 id를 잘못작성한 것 때문에 NPE(NullPointerException) 이 발생할 때가 종종 있었습니다.
그러나 뷰 바인딩은 뷰의 직접 참조를 생성하므로 유효하지 않은 뷰 ID로 인해 NPE가 발생할 위험이 없습니다.

유형 안전

바인딩 클래스(ActivityMainBinding)의 필드 유형은 XML의 뷰와 완전히 일치합니다. 그렇기 때문에 Class Cast Exception 이 발생할 위험이 없습니다.

Reference

뷰 결합 - 안드로이드 공식 문서

post-custom-banner

0개의 댓글