ViewBinding 이란?
viewBinding이란 Android JetPack의 구성요소 중 하나이며 뷰와 상호작용하는 코드를 더 쉽게 작성할 수 있게 해주는 기능입니다.
대부분의 경우 viewBinding은 findViewById를 대체 할 수 있습니다.
ViewBinding 종속성 추가
viewBinding을 사용하기 위해 Gradle에 추가 해줘야합니다.
Gradle Scripts -> build.gradle.kts (Module:app)
buildFeatures {
viewBinding = true
}
위 코드를 적으셨으면
위 와같이 Sync Now를 하라고 메시지가 위에 뜰 겁니다. 그럼 바로 Sync now!
Activity에서 ViewBinding 사용법
class MainActivity : AppCompatActivity() {
// binding 초기화설정
// 주의할 점: binding 이후 ActivityMainBinding은 xml 이름이며 뒤에 Binding을 붙여줘야합니다.
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// binding inflate 설정
binding = ActivityMainBinding.inflate(layoutInflater)
enableEdgeToEdge()
// binding root 설정
setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
}
}
위에 주석 처리 한 것처럼 3가지 코드만 추가해 주시면 됩니다.
코드 작성할 땐 setContentView 아래서부터 코드 작성해야 합니다.
binding을 참조하면 언더바 " _ "는 원래 안 보이니 당황하지 마세요!
binding을 참조할 땐 아래 코드처럼 참조합니다.
binding.tvText.text = "주코딩의 개발노트"
binding.btnButton.setOnClickListener {
// 버튼 이벤트
}
즉, findViewById처럼 길게 쓸 필요 없이 binding으로 참조가 가능합니다.
Fragment에서 ViewBinding 사용법
class BlankFragment : Fragment() {
// binding 초기화 설정을 해줍니다.
private var _binding: FragmentBlankBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// binding inflate 설정
_binding = FragmentBlankBinding.inflate(inflater, container, false)
return binding.root
}
// 이 코드에 대해선 따로 설명 하겠습니다.
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
마찬가지로 위 3개 코드를 작성하고 return binding.root 이후에 코드를 작성하시면 됩니다.
참조법은 Activity와 동일합니다.
onDestroyView에서 _binding을 null 처리하는 이유가 뭐야?
Fragment에서 ViewBinding을 사용할 경우 fragment가 view보다 오래 지속되어 Lifecycle로 인해 메모리 누수가 발생할 수 있습니다.
따라서 fragment가 파괴되는 시점인 onDestroyView에서 binding을 null처리해줘야 합니다.
포스팅을 마치며
참조: https://developer.android.com/topic/libraries/view-binding?hl=ko
꼭 위 공식문서도 한번 참조하시길 바랍니다!
'Android Studio > - Programming' 카테고리의 다른 글
[안드로이드] MVVM 패턴이란? (0) | 2024.05.21 |
---|---|
[안드로이드] 4대 컴포넌트 (0) | 2024.05.13 |
[안드로이드] 액티비티 생명주기 ( Activity Lifecycle ) (0) | 2024.04.24 |
[안드로이드/Regex] 정규표현식, 회원가입 유효성 검사 (0) | 2024.04.08 |
[코틀린] lateinit과 by lazy의 차이점 (0) | 2024.03.29 |
주코딩의 개발 노트!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!