오늘은 viewbinding에 대해 정리해보고자 한다. 물론 jetpack compose를 메인으로 쓰면 쓸 일은 거의 없지만 하이브리드로 xml을 쓰는 경우도 있으니 간단하게 알아 놓는 것 정도는 괜찮다고 생각한다.
View Binding은 안드로이드 개발에서 레이아웃 XML 파일에 정의된 뷰들을 보다 안전하고 간편하게 코드로 참조할 수 있도록 도와주는 기능이다. 기존의 findViewById() 방식보다 코드가 간결해지고, 컴파일 시점에 타입 안정성을 보장받을 수 있어 런타임 에러를 줄이는 데 큰 도움이 된다.
1. View Binding의 개념
- 자동 생성된 바인딩 클래스:
각 XML 레이아웃 파일마다 해당 레이아웃의 모든 뷰에 대한 참조를 멤버 변수로 포함하는 바인딩 클래스가 자동으로 생성된다. 예를 들어, activity_main.xml 파일이 있다면 ActivityMainBinding 클래스가 생성되어, 레이아웃 내의 뷰들을 직접 접근할 수 있다. - 타입 안전성:
각 뷰의 타입이 미리 정의되어 있기 때문에 findViewById()를 사용하면서 발생할 수 있는 형 변환 오류를 방지할 수 있다.
2. View Binding 활성화 방법
View Binding을 사용하는 법은 매우 간단하다. 모듈의 build.gradle 파일에 아래와 같이 설정을 추가하면 된다.
이렇게 하면 빌드 시 각 레이아웃 파일에 대응하는 바인딩 클래스가 자동으로 생성된다.
3. View Binding 사용 예
사용 예시도 간단하다.
ActivityMainBinding.inflate(layoutInflater)를 사용하여 레이아웃을 인플레이트하고 binding.root를 setContentView()에 전달하여 화면에 표시하면 된다.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding // 자동 생성된 바인딩 클래스 사용
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 예: TextView에 텍스트 설정
binding.textView.text = "Hello, View Binding!"
}
}
Fragment에서는 뷰의 생명 주기에 맞춰 바인딩 객체를 해제해 주어야 메모리 누수를 방지할 수 있다.
Fragment의 뷰가 소멸될 때 _binding을 null로 만들어 메모리 누수를 예방하자.
class ExampleFragment : Fragment() {
private var _binding: FragmentExampleBinding? = null
private val binding get() = _binding!! // non-null 접근
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentExampleBinding.inflate(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null // 뷰가 소멸될 때 바인딩 객체 해제
}
}
'어플리케이션, 앱 (Application) > 안드로이드 (Android)' 카테고리의 다른 글
안드로이드 앱 생명주기 (Activity Lifecycle) (0) | 2025.03.19 |
---|---|
안드로이드 앱 애드몹 광고를 이용한 수익화 방향 (애드몹 리워드 광고 단가) (0) | 2025.03.18 |
안드로이드 jetpack compose 공부 정리 2일차 (코틀린, android 14 이후 버전) (0) | 2025.03.12 |
모스부호를 빛 신호로 바꾸는 손전등 앱 (0) | 2025.03.09 |
버전 업데이트시 신경 쓸 딱 두 가지 사항 (0) | 2025.03.09 |