-
[Android] View Binding (feat. 뷰 바인딩 전 늘 하는 사전 작업)IT Study/Android 2024. 1. 27. 13:57728x90
Android에서 뷰 바인딩을 하기 위해서는 사전 작업이 필요합니다.
이 사전 작업은 무엇이며, 각 코드는 어떤 역할을 하는지, 왜 이것이 필요한지에 대해 이번 블로그 글에서 다뤄보려고 합니다.
📁 Gradle 파일에 Sync 하기
viewBinding { enable = true }
🛰️ Activity 파일에 binding 가져오기
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) // View Binding ... } }
2-1. Activity 클래스에 AppCompatActivity 상속하여 선언하기
이 부분은 MainActivity라는 이름의 클래스를 선언하는 부분입니다.
이 클래스는 AppCompatActivity를 상속받아서, Android 앱의 기본적인 생명주기를 관리할 수 있습니다.
class MainActivity : AppCompatActivity() {
2-2. lateinit 키워드를 사용해 ActivityMainBinding 타입의 변수를 선언하기
lateinit 키워드는 이 변수가 나중에 초기화될 것임을 의미하는데요, 선언과 동시에 초기화하지 않아도 된다는 것입니다.
ActivityMainBinding은 XML 레이아웃 파일이 컴파일 될 때 자동으로 생성되는 클래스로,
이를 통해 레이아웃에 있는 뷰를 직접 참조할 수 있습니다.
private lateinit var binding: ActivityMainBinding
2-3. 액티비티가 생성될 때 호출되는 onCreate() 메서드 오버라이드
onCreate() 함수는 액티비티가 생성될 때 호출되는 콜백 메서드이며,
savedInstanceState는 액티비티가 이전에 저장한 상태를 전달받을 수 있습니다.
액티비티가 재생성되어야 할 경우(화면 방향 변경, 배터리 부족 등) 이 Bundle 객체를 사용하여 액티비티의 상태를 복원합니다.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
2-4. inflate() 메서드를 사용해 XML 레이아웃을 뷰 객체로 변환 및 binding 변수에 할당하기
inflate() 메서드는 XML 레이아웃을 뷰 객체로 변환하는 과정을 말합니다.
이 부분에서 layoutInflater를 사용하여 ActivityMainBinding 객체를 생성하고, 이를 binding 변수에 할당합니다.
binding = ActivityMainBinding.inflate(layoutInflater)
2-5. setContentView() 메서드 호출, 액티비티의 화면을 구성하는 뷰 설정하기
setContentView() 메서드는 액티비티의 화면을 구성하는 뷰를 설정합니다.
여기서 binding.root는 XML 레이아웃 파일의 최상위 뷰를 반환합니다.
setContentView(binding.root)
🤚🏾 결론
결론적으로, 이 코드는 MainActivity에서 사용할 뷰를 세팅하고, View Binding을 사용해
XML 레이아웃의 뷰를 코드에서 직접 참조할 수 있도록 설정하는 과정을 보여줍니다.
View Binding을 사용하면 findViewById()를 사용하지 않고도 뷰를 참조할 수 있어 코드가 간결해지고,
null 안정성을 보장받을 수 있습니다.
이런 원리를 알고 코드를 작성한다면... 더 좋겠죠? 그럼 모두 즐코 (즐거운 코딩하라는 뜻) ... ㅎㅎ 👋🏻
'IT Study > Android' 카테고리의 다른 글
[Kotlin] tailrec(꼬리 재귀)란 (0) 2024.02.03 [Android] Foreground Service를 사용하고 싶을 경우 (feat. API 레벨 34 이상) (0) 2024.01.30 [Android] Thread (feat. 스레드란?) (2) 2024.01.24 [Android] counter(계수기, 숫자 세기) 앱 (feat. 화면 회전 시 초기화, 화면 회전 시 UI 가려지기, weight) (1) 2024.01.21 [Android] View 그려지는 과정 (뷰가 그려지는 순서) (2) 2024.01.20