inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[중급편] 친절한 JETPACK 개론 <상> (Android Kotlin)

ViewBinding

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

189

dbsrjsdlf

작성한 질문수 4

0

segaweg.PNG

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

 

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

android kotlin jetpack

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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로 초기화할 필요성이 적어집니다.

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

dataBinding 시 오류

0

66

2

Retrfit 에러

0

146

2

[Retrofit 간단한 예제 변경 + RecyclerView 추가] 에 databinding 추가해 보았습니다.

1

218

2

Navigation Data Transfer Safe Args 강의중에서

0

267

2

viewModel 초기화 관련 질문드려요

0

283

1

Fragment에서 ViewBinding과 DataBinding 초기화 차이가 궁금합니다.

0

282

1

Retrofit + ViewModelScope + RecyclerView + Glide 강의중에서

0

321

2

Retrofit 간단한 예제 변경 강의중에서

0

301

2

LiveData 와 MutableLiveData 차이강의중에서

0

502

5

Activity/Fragment ViewModel 공유 10분35초경에 fragment 에 viewModel선언

0

221

1

안드로이드 테마 색상 오류

0

245

1

Map / SwitchMap - 2 강의 오류

0

386

1

에러

0

351

1

ViewBinding 질문 있습니다.

2

386

2

fragment 이동시 data 초기화

0

391

1

CoroutineScope 질문

0

371

1

뷰모델 질문

0

308

1

바인딩 때 xml

0

289

1

코루틴과 workmanager 순서 정하기의 차이점

0

521

1

ViewModel 값

0

296

1

Retrofit 질문입니다.

0

491

1

Activity / Fragment 의 ViewMode 질문있습니다.

0

317

1

2강 질문이씁니다.

0

283

1

Json 형식 데이터 모델 설계 질문드립니다 :)

2

1518

1