개발노트/Kotlin

7주차 3일 fragment에서 viewbinding과 fragment의 구?조?

시계속세상은아직돌아가는중 2023. 8. 23. 20:03

1. viewbidng

 

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

    /**
    우리가 사용해야할 변수들은 변하지 않는 값이여야한다.
    왜냐하면 신뢰할 수 있는 변수는 변치않아야 하기 때문.

    때문에 사용하는 패턴은 val get() =을 사용하여 변수를 관리한다.
    이러현 패턴은 뷰모델에서 이런 패턴을 주로 쓸 것이다.

    위의 변수 선언 방식은 구글 가이드 형식이다.

    변수를 조작하는 것은 _binding
    변수를 사용하는 것은 binding
    */

 

해당 방법은 개발자 문서에 제공하는 원칙을 따른 것으로, 직접적으로 사용할 변수를 상수로 두고,

그 값은 _binding에서 get()해오는 형식이다.

 

 

 

2.fragment와 액티비티???

fragment와 acitvity의 생명주기는 다르다.

별개의 생명주기를 가지고 있으므로, 액티비티가 종료 되더라도(destroy) 살아있는 경우가 있을 수 있다.

그런 경우에는 _bidng을 직접적으로 destory해주어 메모리 누수를 잡을 수 있다.

 

또한 fragment를 액티비티에서 직접적으로 선언하여 제어할 수 있는데, 이전 선발대 과제에서 참조하자면

아래의 형식을 따른다.

 

 

val todofragment = TodoFragment

 

todofragment는 TodoFragment를 직접적으로 접근할 수 있게 만들어주는 통로가 되어 해당 안에 있는 변수와 함수들을 접근할 수 있게 해준다. 이는 내가 이전에 무식하게 데이터를 박아넣어서 새로 그리는 형식처럼이 아닌, fragment에 직접적으로 데이터를 꽂아넣을 수 있다는 말이기도 하다.

 

현재 이에 대한 고민을 하며 구현을 시도하고 있으나 쉽지 않다.

이전에 했던 방식에서

 

        val todofragment = TodoFragment
        
        todofragment.newInstance(getTitle,getDetail)

 

메인 액티비티에서 이처럼 값을 꽂아준다면

MainTabs(TodoFragment.newInstance(),

어댑터에서 해당 부분이 오류가 난다. 인스턴스에서 받을 값이 없기 때문이다.

따라서 튜터님께서 만드신 어댑터의 구조에 대해서 좀 더 고민해볼 필요가 있는 듯 하다.

 

 

참고한 블로그

https://cliearl.github.io/posts/android/prevent-fragment-memory-leak-during-viewbinding/

 

View Binding 사용시 Fragment의 메모리 누수 대응하기

들어가기 findViewById 대신 View Binding 사용하기 강의에서 View Binding에 대해 다루었습니다. View Binding을 도입하면 코드를 더 안전하게 작성할 수 있고 빌드도 빠르게 할 수 있습니다. Fragment에서의 메

cliearl.github.io

https://developer.android.com/topic/libraries/view-binding?hl=ko 

 

뷰 결합  |  Android 개발자  |  Android Developers

뷰 결합 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정

developer.android.com