본문 바로가기

안드로이드

안드로이드 공부 기초 7(Binding)

 Navigation Drawer 기능을 사용해 Navigation 목록이 있는 프로그램을 작성하려고 하는데 어렵고 생소한 기능이 많았다. 하나하나 이해하면서 공부하기 위해 이번엔 Binding 기능을 알아보겠다. 

 

 

기존 xml 파일에서 id를 가져와 동적인 일을 할 때 TextView나 Button 같은 변수를 선언하고 findViewById()를 통해 변수와 xml 파일의 요소를 연결했다. 하지만 이런 방식으로 연결하게 되면 몇 가지 단점이 있다. 실수로 유효하지 않은 id를 사용하면 null 오류가 발생할 수 있고, casting Type을 잘못 적어서 casting 하면 cast exception이 발생할 수 있다. 또한 속도가 상대적으로 느리다.

 

이러한 단점을 해결하기 위해 기존엔 Butter knife라는 라이브러리나 extension을 이용해서 불편함을 해결했다고 한다. 그러다 3.6 버전에서 이를 대체할 수 있는 view binding이 나오게 된다.

 

 

view binding을 사용하기 위해선 build.gradle에 코드를 추가해줘야 한다.

 

 

기존 build.gradle

 

android{

}

 

속에 

 

buildFeatures {
        viewBinding = true

}

 

을 넣어주면 된다. view binding을 사용하겠다는 의미다. 추가 후 File 탭에 있는 Sync Project with Gradle Files를 해 주어야 반영된다.

 

 

 

수정 후 build.gradle

 

 

간단한 코드 추가로 사용하기 위한 준비가 끝났다.

이제 findViewById를 사용했던 코드를 binding을 사용한 코드로 바꿔보자.

 

 

 

 

 

 

 

기존 MainActivity.java

 

 

 

 

 binding을 사용하면 xml과 연결되는 binding 클래스가 자동으로 생성되며 그 클래스의 멤버로 xml 파일의 ID를 가진 모든 뷰를 참조하는 참조변수가 있다. xml  파일명이 activity_main 이라면 binding 클래스명은 ActivityMainBinding이 된다.

 ListView 변수와 findViewById를 사용했던 코드를 ActivityMainBinding 변수와 inflate(), setContentView() 함수를 이용한 코드로 바꿔주자.

 

 

 

 

 

 

수정 후 MainActivity.java

 

 

 view binding을 사용하면 사용하는 View의 수가 많으면 많을수록 코드가 짧아진다. 20개가 넘는 View들에 전부 findById를 사용한다고 생각해 보니 벌써 코드가 더러워질 것 같은 기분이다... view binding을 애용해보자.