[Android] viewBinding

fanthasium·2022년 10월 13일
0

사용법을 익히기 전 대체 Binding? 이뭔지 알아보자!
Binding이란 구체적인 값,성격을 확정하는 것
내 식대로 해석하면 주소를 이미 갖고 있다로 해석된다.
따라서 컴파일,링크,설계 등등 컴파일 시간에서 걸리는 정적 바인딩 시간,런타임 중 동적바인딩 시간을 줄여줄 수 있다

ViewBinding(뷰 결합)

ViewBinding이란
findViewById를 대체할 수 있는 안드로이드의 아키텍처 구성이다.
xml 레이아웃 파일의 Binding 클래스를 생성하여 xml에 있는 id를 직접참조 하여 사용하는 방식!

< 사용방법 >

모듈 수준의 gradle에서

android {
        ...
    viewBinding {
        enabled = true
       }
    }

<Activity일 경우>
결합 클래스의 이름은 XML 파일의 이름을 카멜 표기법으로 변환 하여 사용된다 XML파일의 이름이 result_profile.xml 인 경우에는 ResultProfileBinding로 변환돼 나온다

  private lateinit var binding: ResultProfileBinding

    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        binding = ResultProfileBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
    }

setContentView에 binding.root를 넣는 이유는
안드로이드는 xml 전체를 감싸주는 최상단 부모를 root로 제공하는데, activity 실행시 onCreat내에서 제일 먼저 보여줄 layout이라 정해주는 것이다.

<FragMent인 경우>

Fragment는 Activity위에서 실행돼 Activity와는 다르게 안드로이드 LifeCycle의 주기가 onCreatView에서 초기화 된다.

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

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = ResultProfileBinding.inflate(inflater, container, false)
        val view = binding.root
        return view
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

어? 여기선 왜 Destroy 단계에서 binding을 또한번 null해주지? 이는 안드로이드 LIFECYCLE에 의해서 프래그먼트가 뷰보다 더 오래 살아 남기에 Binding 클래스가 참조한 뷰들이 제거 됐을 때 인스턴스도 같이 정리해주기 위함이다
LifeCycle에 대해선 다뤄보도록 하겠다!

profile
디그다 디그다 (끙챠끙챠)

0개의 댓글