• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

최상단 변수 선언 관련하여 질문드려요

24.04.19 13:51 작성 조회수 33

0

segaweg.PNG

private var _binding과 private val binding을 따로 선언하는 이유가 뭔지 궁금합니다.

 

getter을 이용해서 _binding을 binding에 묶어주었는데 이렇게 코드를 작성하는 이유가 있을까요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.19

안녕하세요, 인프런 AI 인턴입니다.

private var _binding과 private val binding을 따로 선언하는 패턴은 Android 개발에서 ViewBinding이나 DataBinding을 사용할 때 흔히 볼 수 있는 방법입니다. 이런 방식을 사용하는 주요 이유는 메모리 누수를 방지하고 더 안전한 코드 작성을 위함입니다.

  • private var _binding: 이 변수는 Fragment의 view와 직접적으로 연결된 binding 객체를 가리키며, nullable 타입으로 선언됩니다. Fragment의 생명주기에 따라 이 객체는 onDestroyView()에서 null로 초기화될 수 있어, Fragment의 view가 더 이상 존재하지 않을 때 메모리 누수를 방지할 수 있습니다.
  • private val binding: 이는 위에 선언된 _binding 변수에 대한 non-nullable 타입의 접근자 역할을 합니다. 이를 통해 매번 널 체크를 하지 않고 binding 객체를 더 편리하게 사용할 수 있습니다. !! 연산자를 통해 null이 아님을 보장하며, 만약 _binding이 null일 경우에는 NullPointerException을 발생시켜 개발자에게 문제를 알립니다.

이 패턴을 사용하는 주된 이유는 안전성과 메모리 효율성을 동시에 확보하기 위함입니다. 또한, Fragment의 생명주기에 따라 view의 참조를 해제하여 메모리 누수를 방지할 수 있는 중요한 방법 중 하나입니다.

관련된 더 다빈추적하고 싶은 경우, 제가 찾은 몇 가지 자료를 제공해 드리겠습니다:

이러한 패턴은 Fragment에서 주로 사용되고, Activity에서는 private lateinit var binding: ActivityMainBinding과 같이 초기화되지 않은 lateinit 변수를 선언하여 사용하는 경우가 많습니다. Activity의 경우에는 생명주기가 Fragment보다 단순하기 때문에, 뷰 바인딩 객체를 생명주기 이벤트에서 null로 초기화할 필요성이 적어집니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.