IT Study/Android

[Android] View Binding (feat. 뷰 바인딩 전 늘 하는 사전 작업)

three kim 2024. 1. 27. 13:57
728x90

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 안정성을 보장받을 수 있습니다.

 

이런 원리를 알고 코드를 작성한다면... 더 좋겠죠? 그럼 모두 즐코 (즐거운 코딩하라는 뜻) ... ㅎㅎ 👋🏻