📜 TIL

Fragment에서 뷰바인딩(ViewBinding)해주는 방법과 적용

둥굴둥굴둥굴레차 2023. 3. 12. 11:17

오늘 공부한 내용 📋

  • ViewBinding에 대해 공부
  • EditText에 적힌 text를 버튼 하나로 한 번에 clear하는 기능 구현

 

 

ViewBinding해주는 이유?

화면요소(view)에 접근하여 값을 입력하거나 사용자와 상호작용하는 방식을 제어하기 위해

 

View Binding을 사용하기 위해서는 build.gradle 파일에 다음 내용을 추가해야 한다.

android {
buildFeatures {
        viewBinding true
    }
}

 

 

자동으로 생성된 FragmentLoginBinding 클래스를 사용하여 멤버변수를 선언해주자. (onCreateView 이전에 선언해주자)

 

이제 binding이란 이름의 멤버변수를 사용하여 위젯에 접근이 가능하다.

class LoginFragment : Fragment() {

	private var _binding: FragmentLoginBinding? = null
	private val binding get() = _binding!!

	override fun onCreateView(
	        inflater: LayoutInflater,
	        container: ViewGroup?,
	        savedInstanceState: Bundle?
	    ): View? {

	 }
}
  • binding get() = _binding!!은 필드는 생성하지 않고 getter함수를 통해 특정 객체만 return하는 것!
  • 관련 내용은 여기를 참고하자

 

FragmentLoginBindinginflate하고 다음과 같이 view를 리턴하면 끝!

이제 각 위젯을 binding을 통해 접근할 수 있다.

_binding = FragmentLoginBinding.inflate(inflater, container, false)
return _binding!!.root

 

최종 코드.kt

class LoginFragment : Fragment() {

    private var _binding: FragmentLoginBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

        _binding = FragmentLoginBinding.inflate(inflater, container, false)

        return _binding!!.root

    }

}

그런데, 위 방법은 Viewbinding을 Fragment에서 사용했을 때의 방법!

 

만약 Activity에서 사용시

val binding by lazy { 레이아웃파일명Bidning.inflate(layoutInflater) }

 

만약 Adapter에서 사용시

// onCreateViewHolder()안에서 다음과 같이 사용
var binding = 레이아웃파일명Binding.inflate(LayoutInflater.from(parent.context), parent, false)

 

어려웠던 내용 🤢

ViewBinding을 할 때 다음과 같은 과정을 거치는데, 왜 해줘야하는 부분인지 잘 모르겠다.

private var _binding: FragmentLoginBinding? = null
private val binding get() = _binding!!

우선 이 글을 보고 binding get() = _binding!!을 하게되면, Field값은 생성되지 않고 getter를 통해 특정 객체만 반환되는 것이라는 것 까지만 이해되었다

  • 사실 오늘 공부한 내용란에 있는 EditText에 적힌 text를 버튼 하나로 한 번에 clear하는 기능 을 직접 구현하려했다. 이미 해당 기능이 직접 구현이된 앱의 소스파일을 들고있기 때문에, 참고하면서 만들면 금방 만들 것이라 생각했다.

    그런데 해당 소스 파일은 findViewById로 이루어지지 않았기 때문에 ViewBinding을 공부하지 않은 나로서는 코드를 해석하기가 난감하였다. 버티고 버티다 결국 기존에 내가 만들어둔 앱의 소스를 모두 ViewBinding 형식으로 작성하기로 하였다.

 

 

느낀 점 🤔

처음 모바일 개발을 배울 때 들었던 인터넷 강의에서는 findViewById를 사용하여 가르쳐줬기 때문에 ViewBinding에 대해 공부해야할 필요성을 느끼지 못하였다.

하지만 현재 나와 협업하는 사수님이 앞으로 짜는 모든 코드는 ViewBinding을 사용할 것이니 학습해두라고 하셔서 학습하게 되었다.

역시 배우는 것을 게을리 하지 않으면 안된다!

그리고 내가 기초에 대해 많이 부족하다는 것을 느꼈다. 이전에 봤던 인터넷강의가 아닌 쉬운 강의를 인프런에서 결제하고 공부해야겠다. 개복치 개발자 괜찮은 듯?

 

 

참고 사이트 📄

 

Android ViewBinding VS DataBinding

개복치개발자 강의는 아래의 링크에서 확인할 수 있습니다. https://www.inflearn.com/course/%EC%B9%9C%EC%A0%88%ED%95%9C-jetpack-1?inst=3b988560 [중급편] 친절한 JETPACK 개론 (Android Kotlin) - 인프런 | 강의 코틀린으로

philosopher-chan.tistory.com

 


 

제 글이 누군가에게 도움이 되었길 바랍니다.

추가적인 질문은 언제든지 환영해요.

 

인상깊게 보셨다면 바로 위에 있는 광고 한 번만 클릭해주세요!

정말 큰 힘이 됩니다~! 🤠