안녕하세요 골드입니다. Show 이번 글은 안드로이드에서 사용하도록 권장하는 방법 중 하나인 뷰 결합에 대한 글입니다. 뷰 결합을 사용함으로써 생산성이 다소 높아질 것이라고 생각됩니다. 뷰 결합은 기존의 개발 방식을 더 편리하게 만들어주는 하나의 도구입니다. 특히 Java로 안드로이드 개발을 하던 시절에 View에 대한 참조를 위해 findViewById를 상당히 많이 사용했었습니다. findViewById로 참조하고 형변환을 해서 사용하던 기존 방식에 대한 불편함을 View Binding이 상당 부분 해결해줍니다. 그렇기 때문에 구글에서 사용을 권장하는 방법입니다. 요약 : 구글 : 너네 findViewById 쓰니까 에러도 많고 귀찮았지? 그래서 우리가 준비했다. View Binding이라는 걸 한 번 사용해봐! 1. 사용하기뷰 결합을 사용하기 위해 앱 모듈 build.gradle에 ViewBinding을 사용한다고 알려줍니다. View Binding은 모듈 별로 사용 설정됩니다. 사용 설정된 View Binding은 모듈에 있는 각 xml 파일에 대한 Binding 클래스를 생성합니다. 우리는 이 Binding 클래스를 사용하여 레이아웃 ID가 있는 뷰에 직접 참조 할 수 있게 됩니다.
예제를 위해 HomeFragment.kt와 fragment_home.xml 파일을 생성하도록 하겠습니다. fragment_home.xml 파일입니다. ConstraintLayout을 루트로 감싸고 FragmentContainerView와 BottomNavigationView를 하나씩 선언하였습니다. 참조를 위해서는 반드시 id 속성을 선언해야 합니다. 만일 참조가 필요하지 않다면 id속성을 선언하지 않아도 됩니다. HomeFragment.kt로 이동해서 생성된 Binding 클래스를 참조하는 변수를 선언합니다. Binding 클래스는 카멜 표기법으로 작성한 xml 파일 이름 뒤에 Binding이 붙은 이름으로 생성됩니다. 접근할 때 사용하는 getter 변수도 하나 선언합니다(Optional). Fragment에서 사용하기 위해 onCreateView 안에서 Binding클래스 참조 변수에 inflate()를 하고 getter 변수로 접근하여 루트 뷰의 참조를 return 합니다. 가상 머신을 실행시켜보면 반환된 루트 뷰가 화면의 활성 뷰로 나타나고 있음을 확인할 수 있습니다. 이제 getter 변수로 xml에서 ID 속성을 선언한 View들을 참조할 수 있음을 확인할 수 있습니다. 참조 뷰들은 카멜 표기법으로 선언되었음을 알 수 있습니다. xml에 선언되어 있는 어떠한 View도 ID속성만 갖고 있다면 Binding 클래스를 활용하여 참조할 수 있습니다. 2. findViewById와의 차이점앞서 View Binding은 findViewById를 대체할 수 있다고 말씀드렸습니다. 대체가 가능하다는건 위의 예제를 보면 알 수 있습니다. 그럼 구체적으로 어떤 차이점이 있는지 보겠습니다.
결과적으로 코드의 생산성을 높일 수 있다는 점이 View Binding에 가장 큰 매력으로 생각됩니다. 여기까지 골드였습니다. 감사합니다. 참고자료 : developer.android.com/topic/libraries/view-binding?hl=ko 뷰 결합 | Android 개발자 | Android Developers 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩 클래스의 developer.android.com
기존에는 이러한 상황 속에서 뷰바인딩이 등장하게 되었고 간단한 설정만 하면 뷰에 쉽게 접근하여 작업이 가능해진다.
뷰바인딩을 사용하려면
추가하면 우측 상단의
뷰바인딩은 이유는 액티비티와 프래그먼트의 생명주기(Lifecycle)가 다르기 때문이다. 우선 액티비티에서는 아래와 같이 사용한다.
여기서 각각의 액티비티나 프래그먼트에 연결된 xml 파일을 이름을 카멜 표기법으로 변경하고 이름 끝에 Binding을 추가하여 만들어진다. 예를 들어, 메인 액티비티의 경우 같은 방법으로
일반적으로 때문에 프래그먼트에서는 뷰바인딩을 아래와 같이 사용한다.
추가로,
뷰바인딩 설정이 끝나면 뷰를 뷰바인딩을 통해 작업할 수 있게된다. 이때 액티비티나 프래그먼트와 결합하는 뷰(xml파일)의 이름이 자동 생성되었던 것처럼 결합된 뷰 안에 있는 TextView나 ImageView 같은 뷰의 참조값도 자동 생성된다. 예를 들어 마찬가지로 |