[Android] ViewBinding에 대해서 간단히 알아보기

Jinny·2021년 3월 22일
0

Android

목록 보기
32/32
post-thumbnail

🚩 ViewBinding이란?

binding 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다.
모듈에서 사용 설정된 ViewBinding은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다.
binding Class의 인스턴스에는 상응하는 레이아웃에 ID가 있는 모든 뷰의 직접 참조가 포함된다.

쉽게 말하자면 xml 레이아웃의 아이템들을 findViewById 보다 간편하게 가져와 사용할 수 있다.
대부분의 경우 ViewBinding이 findViewById를 대체한다.

🔸 findViewById와 차이점!

  • Null safety: ViewBinding은 뷰에 대한 직접 참조를 생성하기 때문에 View ID가 잘못됨으로 인한 NPE를 발생시킬 위험이 없다.

  • Type safety: 각 바인딩 클래스의 필드에는 XML 파일에서 참조하는 뷰와 일치하는 타입을 갖고 있어, 클래스를 캐스팅할 때 발생할수 있는 오류가 없다.

레이아웃 파일과 실제 자바/코틀린 코드간에 일치하지 않아 발생하는 문제가 런타임이 아닌 컴파일타임에 발생하기 때문에 더 빠르게 에러를 잡고, 개발자는생산성을 늘릴 수 있습니다.

🚩 사용하기

  1. build.gradle (모듈) 에 추가한다.
android {
        ...
        viewBinding {
            enabled = true
        }
    }
  1. Class 내에서 사용 설정하기
private lateinit var binding: ActivityMainBinding
// activity_main.xml = ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        binding = ResultProfileBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
    }

참고로!
class TodoListHolder(val binding: ItemTodoBinding) : RecyclerView.ViewHolder(binding.root)
와 같이 .root 를 통해 본인이 어떤 뷰로 부터 생성된 바인딩인지 확인 가능하다.

  1. 실제 사용하기

class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {
    // View Binding 사용 순서 1
    private var _binding : ActivityMainBinding? = null
    val binding get()= _binding!!
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // View Binding 사용 순서 2
        _binding = ActivityMainBinding.inflate(layoutInflater)
        // View Binding 사용 순서 3
        // bottomNavigationView = findViewById(R.id.nav_bottom)
        // bottomNavigationView.setOnNavigationItemSelectedListener(this)
        binding.navBottom.setOnNavigationItemSelectedListener(this)

      
    }
    override fun onDestroy() {
        super.onDestroy()
        // 구현순서 4
        // 추가적으로!! Activity가 destroy 될 때 binding객체도 없애야 좋다.
        _binding = null
    }

참고 : view Binding 관련 블로그 & view-binding 공식문서
profile
신입 개발자👩‍💻

0개의 댓글