예전에 코틀린을 사용했을 때, Kotlin Android Extension을 사용할 때 자바에서 findViewById를 일일히 안해줘도 되는 편리함이 마음에 들었었다. 그러던 중, 뷰 바인딩을 알게 되었다. 뷰 바인딩을 사용하면 다음과 같은 이점이 있다.
1. build.gradle 수정app 수준의 build.gradle에 다음 내용을 추가해주자.
안드로이드 스튜디오의 버전이 4.0 이상이라면 위의 코드를
안드로이드 스튜디오의 버전이 3.6 이상 4.0 미만이라면 위의 코드를 추가해주자. 2. 뷰 바인딩 사용하기
다음과 같은 activity_main.xml 레이아웃 파일이 있다고 가정해보자. 뷰 바인딩을 사용할 시 각 xml 파일에 대한 바인딩 클래스가 생성된다. 위의 xml 파일의 경우 AcitivityMainBinding 이라는 바인딩 클래스가 생성된다. 이는 xml 파일의 이름을 카멜 표기법으로 변환하고 끝에 Binding을 붙인 것이다.
생성된 바인딩 클래스에 inflate 메소드를 호출하고, getRoot 메소드로 루트 뷰를 반환한 뒤, 이를 setContentView로 화면 상의 활성 뷰로 만들면 된다. 3. 뷰 참조하기
binding.id로 레이아웃 내의 뷰를 참조할 수 있다. + 프래그먼트에 뷰 바인딩 사용하기
뷰를 참조하는 것은 위와 3번과 동일한 방식으로 하면 된다. 4. 참조Android developers, "뷰 결합", https://developer.android.com/topic/libraries/view-binding?hl=ko 이전 포스트에 이어서 뷰 바이딘에 대한 4번째 예제를 소개하겠습니다. 이전 버터나이프 포스트에서 소개한 바와 같이 실제 앱을 구현하다보면 액티비티에 직접 뷰들을 배치하여 사용하기 보다 화면의 부분별로 별도의 영역(Fragment)으로 나누어 UI를 작업하는 경우가 더 많습니다. 화면구성이 단순하지 않으면 액티비티에 모든 뷰들을 배치하여 관리하기 어렵고 코드도 복잡하기 때문이지요. 그로인해 Fragment를 사용하는 빈도가 아주 높습니다. 그래서 이번에는 Fragment 에서 뷰 바인딩을 사용하여 뷰들을 제어해보겠습니다. 4) 프레그먼트에 뷰바인딩 실습 [ MyFragment.java ] 예제가 복잡하면 정작 뷰바인딩을 사용하는 방법보다 다른 부분을 이해하는 것에 어려움을 느낄 수도 있기에 이전 ButterKnife 라이브러리 실습에서 소개한 것과 마찬가지로 아주 간단하게 실습을 진행하고자 합니다. 보통 프레그먼트를 액티비티에 추가할때는 자바에서 FragmentManager를 이용하여 add하는 방법이 일반적으로 더 많이 사용되지만 실습의 단순화를 위해 액티비티의 xml에 <fragment>태그로 정적추가 하겠습니다. Fragment를 상속하는 MyFragment클래스를 별도의 .java 파일로 만들어 적용해 보겠습니다. 먼저, MyFragment에서 보여줄 레이아웃 xml 파일을 만들어 보겠습니다. 간단하게 구성하기 위해 TextView 1개와 Button 1개만으로 구성하여 버튼을 글릭했을 때 TextView의 글씨를 변경하도록 만들어 보겠습니다. # res / layout / fragment_my.xml
뷰 바인딩 사용이 설정되어 있기이 layout 폴더에 xml 파일을 만들면 자동으로 레이아웃 파일명을 기반으로 그에 상응하는 바인딩 클래스가 만들어져 있습니다. 여기서는 fragment_my.xml 이라는 이름의 레이아웃파일이 있기에 자동으로 만들어진 바인딩 클래스의 이름은 FragmentMyBinding으로 됩니다. 액티비티의 바인딩과 크게 다르지 않습니다. 이 바인딩 클래스의 멤버필드에는 레이아웃 xml 파일안에 만든 id가 있는 뷰들을 참조하고 있는 참조변수가 id와 같은 이름으로 만들어져 있습니다. 우리는 이 바인딩 클래스 객체의 멤버필드들을 이용하여 별도의 뷰를 찾아 참조하는 findViewById()작업 없이 뷰들을 제어할 수 있습니다. 다신 언급하지만 레이아웃파일명과 바인딩 클래스의 명명 규칙만 이해하면 그리 어렵지 않게 뷰 바인딩을 사용하실 수 있게 됩니다. fragment_my.xml --- > FragmentMyBinding fragment_aa.xml. --- >. FragmentAABinging 이제 위 레이아웃파일을 보여주고 제어하는 MyFragment.java 를 만들어 보겠습니다. 레이아웃과 연결된 바인딩 클래스 인스턴스를 만드는 부분을 주의 깊게 보시기 바랍니다. 주석으로 설명하였으니 참고바랍니다.
각 코드마다 작성한 주석을 보시면 전체 코드를 이해하실 수 있으실 겁니다. 이제 마지막 단계로 위 MyFragment를 MainActivity에 정적으로 추가하도록 하겠습니다. activity_main.xml 파일에 <fragment>태그로 추가만 하면 되기에 MainActivity.java는 특별히 수정할 부분이 없습니다. 곧바로 액티비티의 레이아웃 파일만 소개하겠습니다.
만들어 보시면 프레그먼트라고 해서 액티비티와 크게 다르지 않다는 것을 알 수 있으실 겁니다. 이제 뷰 바인딩의 마지막 실습으로 실제 앱 구현에 아주 많이 사용되는 RecyclerView 에서 뷰 바인딩을 사용하는 예제를 다음 포스트로 소개하겠습니다. |