TIL/공부

02/27 Kotlin 바인딩

sos000303 2024. 2. 27. 20:28
728x90

오늘도 어제에 이어서 미니 프로젝트로 간단한 팀원 소개 앱을 만드는 중에 전공자인 팀원분께서 버튼 등의 반응코드를 findViewById가 아닌 ViewBinding을 이용해 써보자고 하셨다.

사전캠프 때 들은 강의에서는 findViewById를 이용해 코딩했었지만 앞으로 개발을 하기 위해서는 Binding을 사용하는 방식에 익숙해질 필요가 있다고 하셨다.

먼저 바인딩이 무엇인지 찾아보았다.

코틀린은 레이아웃의 뷰를 액티비티에서 접근하기 위해 아래와 같이 findViewById를 사용해 변수로 선언해주어야 한다. 이러한 작업과정을 바인딩이라고 한다.

val imageView :ImageView = findViewById(R.id.iv_example)

필요한 바인딩의 수가 적을 땐 크게 힘들지 않지만 수십개의 뷰에 하나씩 바인딩을 해주는 과정은 귀찮고 비효율적이다. 이럴때 사용하는 것이 ViewBinding 혹은 DataBinding 이다.

ViewBinding

ViewBinding을 사용하기 위해서는 먼저 gradle.kts(Module :app)의 android { } 안에 아래와 같이 코드를 추가해야한다.

android {
// 중간 코드 생략
    viewBinding {
    	enable = true
    }
}

코드를 추가한 후 액티비티에 몇가지 준비만 해주면 ViewBinding의 사용 준비가 끝난다.

Android Studio를 이용해 Empty Views Activity를 생성하면 다음과 같은 초기 코드를 가지고 있다.

package com.example.studyapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

여기서 조금만 더 바꾸면 ViewBinding을 사용할 준비는 끝난다.

package com.example.studyapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.studyapp.databinding.ActivityMainBinding // 추가

class MainActivity : AppCompatActivity() {
    public lateinit var binding: ActivityMainBinding // 추가 Activity(액티비티 이름)Binding 을 써 주어야 한다.
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater) // 추가
        setContentView(binding.root) // (R.layout.activity_main -> binding.root)변경
    }
}

이를 통해 변수 선언 없이 View를 Activity에서 사용할 수 있게 된다.

val imageView :ImageView = findViewById(R.id.iv_example)
imageView.setOnClickListner{
	//클릭 시 실행할 코드
}

이 코드를 ViewBinding을 이용해 작성하면

binding.ivExample.setOnClickListner{
	//클릭 시 실행할 코드
}

이런식으로 변수선언을 생략할 수 있다.

Data Binding

데이터 바인딩의 경우 layout으로 감싸진 범위에 대해 바인딩을 해준다.

개발과정에서 내가 사용하거나 한 것은 아니라서 완전히 자세히는 모른다.

데이터 바인딩과 뷰바인딩의 큰 차이점은 뷰바인딩은 단방향의 바인딩만 가능하고 데이터바인딩은 양방향의 바인딩이 가능하다고 한다.

728x90