안드로이드 뷰 바인딩 (3) - Fragment
이번 포스팅에서는 Fragment 에서 View Binding 사용법에 대해서 자세히 알아보자.
참고로, 지난 포스팅에서는 View Binding 의 개요, View 접근을 위한 다른 방식들과 비교, 사용법에 대해 알아 보았다.
Fragment Lifecycle
Fragment 는 하단과 같이 Fragment 의 고유한 LifeCycle 과 View 와 관련한 LifeCycle 이 존재한다.
◼ Fragment LifeCycle : onAttach() ~ onDetach()
화면에 보이지 않는 상태에서 호출
◼ Fragment View LifeCycle : onCreateView() ~ onDestroyView()
화면을 구성할 때 호출
Memory leak
Memory leak 이란 더 이상 사용하지 않는 객체가 GC 에 의해 회수되지 않고 계속 축적되는 현상이다.
(상세설명은 구글링......)
Fragment Lifecycle 에서 본 것 처럼 Fragment 의 LifeCycle 은 View 의 LifeCycle 보다 오래 유지된다.
Fragment 의 onCreateView() 에서 viewBinding 을 한 후 다른 frament 로 교체하게 된다면 viewBinding 은 이미 참조하고 있는 것이 있기 때문에 memory leak 이 발생하게 된다.
하단은 안드로이드 공식 문서에서 가이드 하고 있는 Frament 에서 ViewBinding 사용법이다.
즉, Fragment 에서 ViewBinding 사용 시 memory leak 의 위험이 있으니 onDestoryView() 에서
binding 변수를 null 로 해줘야 한다.
Solution
Fragment 에서 ViewBinding 시 memory leak 때문에 onDestory() 에서 binding 개체를 null 로 만들어야 한다.
하지만, 매번 binding 개체를 null 로 만들어야 하는 반복적인 작업이 귀찮다면 하단의 대안도 있다.
◼ onViewCreated() 에서 ViewBinding 참조 끝내기
ViewBinding 을 멤버로 만들지 않고 onViewCreated() or onCreateView() 에서 참조를 모두 끝내는 방식이다.
◼ BaseFragment 상속해서 사용하기
BaseFragment 를 만들어 반복되는 코드를 따로 모아 놓은 방식이다.
◼ Kotlin Delegated properties 사용하기
안드로이드 공식문서에서는 binding null 처리를 했지만, 구글 아키텍쳐 샘플 소스 코드에서는 AutoCleardValue 를 만들어 위임 패턴으로 사용한다.
구글 샘플 코드에 있는 AutoCleardValue를 사용하는 방식이다.
- dependecy 도 추가해야 한다.
◼ 라이브러리 사용하기
각 개발자들이 ViewBinding 을 편하게 사용하기 위해 만들어 놓은 library 를 사용하는 방식이다.
- Binding