[Android,Kotlin] 코틀린 컨벤션 _변수명 특징

youneeo·2024년 1월 27일

전부터 궁금했던것인데. 변수명 앞에 언더스코어(_)를 해주고.
언더스코어가 없는 변수명에서 get()을 하여 사용하는 방식이였다.
대체 이게 왜 필요한지 궁금했다.
일단 간단하게 말하자면. 코틀린 스타일의 코드 작성법이고, 캡슐화 정도로 이해하면 될것같다

코드를 통해 알아보자.
null 연산자에 대해서 이해가 부족하다면, 해당 글을 참고하는게 좋을것같다. Kotlin에서 null 을 다루는법

이 코드는 흔히 볼 수 있는 프래그먼트에서 바인딩을 할때 쓰는 코드이다.

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

자세히보면 _binding 는 var(가변) 타입이고, binding 는 val(불변,읽기전용) 이다.
이때는 별 생각 없이 이렇게 사용하겠거니 하고 사용했다.

하지만 몇달이 지나고, ViewModel을 공부하면서, MutableLiveData 타입의 변수명엔 를 붙이고, 읽기전용은 똑같이 를 뺀 변수명으로 get() 하는게 아닌가?
이는 코틀린의 컨벤션 특징이라고 한다. 공식문서를 읽어보면 있는 부분이다.

한마디로 변경가능한 타입(데이터가 변경되거나,추가되는경우) 에는 변수명 으로 들어온뒤
유저가 보는 화면에선 get() 된 변수명(
가없는 읽기전용 변수) 가 사용되는것이다.

ViewModel을 사용하기 위해서 갑자기 궁금해진 이부분이 프래그먼트에서도 사용되고있었으며,
똑같이 적용해서 알아본다면, binding 객체의 생명주기가 프래그먼트의 생명주기보다 길기때문에

뷰가 파괴될때 _binding = null 로 할당된 메모리를 해제하는거라고 보면된다. (바인딩을 해제함)

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
}
profile
정돈된 공간에서 생각하기를 좋아합니다.

0개의 댓글