본문 바로가기
Programming/APP

[Android Kotlin] View Binding 사용방법

by 해도 Haedo 2022. 11. 11.

안녕하세요. 뉴핀입니다.

오늘은 Activity에서 TextView 또는 Button 등 뷰를 사용하기 위해 View Binding을 활성화하는 방법에 대해서 알려드리고자 합니다.

TextView와 같은 뷰를 Activity에서 수정하거나 값을 읽어오기 위해서는 여러 가지 방식이 존재합니다.

대표적인 예로 findViewById() 함수가 있습니다.

val mText : TextView = findViewById(R.id.tv_hello_world)

이렇게 findViewById() 함수를 사용하게 되면 xml에서 생성한 뷰의 id값을 불러와서 사용할 수 있습니다.
문제는 각 id값을 사용할 때마다 함수를 각각 선언해줘야 하는 불편함과, 해당 함수를 선언할 때 앞에 타입을 명시해야 한다는 점입니다. 이 외에도 코드가 지저분하게 보일 수 있고 많은 id값을 사용해야 하는 경우 번거롭기 때문에 View Binding으로 전환하여 사용하는 것이 편리합니다.

View Binding(뷰 바인딩)에 대한 자세한 정보는 아래 링크를 통해 확인하실 수 있습니다.

 

뷰 결합  |  Android 개발자  |  Android Developers

뷰 결합 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩

developer.android.com

 

build.gradle(Module:)

Gradle Scripts > build.gradle(앱 단위)

우선 build.gradle에 들어가 android {} 내부에 buildFeatures와 그 안에 viewBinding을 선언해야 합니다.

buildFeatures {
    viewBinding true
}

해당 코드를 입력하게 되면 우측 상단에 Sync Now 버튼이 활성화되는데, 해당 버튼을 클릭하여 viewBinding을 활성화합니다.

활성화가 마무리되었으면 xml 파일로 이동하여 TextView에 id값을 입력합니다.
지난 시간에 TextView 예제를 하며 사용하였던 것을 활용하였습니다.

activity_main.xml

res > layout > activity_main.xml

<TextView
        android:id="@+id/tv_hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textColor="#000000"
        android:textSize="20dp"
        android:textStyle="bold"
        android:textAlignment="center"
        android:layout_marginTop="100dp"
        android:layout_marginStart="100dp"
        app:layout_constraintVertical_bias="0"
        app:layout_constraintHorizontal_bias="0"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

예제로 사용할 TextView의 id값을 tv_hello_world로 선언해주고 MainActivity로 이동합니다.

MainActivity.kt

이제 메인에서 뷰 바인딩을 선언해주어야 합니다.

class MainActivity : AppCompatActivity() {
    private var mainBinding : ActivityMainBinding? = null
    private val binding get() = mainBinding!!
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        mainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}

전역 변수로 바인딩 객체를 선언하고, onCreate 안에 바인딩 인스턴스를 생성합니다.

기존에 있던 setContentView 안에 값을 binding.root로 수정합니다.

이제 findViewById ()를 매번 사용하여 번거롭게 코드를 작성할 필요가 없이 binding 하나만으로 해당 액티비티의 모든 id 값을 불러와서 사용할 수 있습니다.

binding.tvHelloWorld.text = "change text"

이렇게 바인딩을 사용하면 TextView 뿐만 아니라 Button이나 EditText 등 다른 뷰를 호출하여 수정하거나 값을 읽어올 수 있습니다.

 

이렇게 'Hello World' 였던 TextView가 View Binding을 통해 Activitiy에서 text 값을 수정하여 'change text'로 변경됨을 알 수 있습니다.

바인딩을 사용하여 xml에 있는 뷰들을 편하게 사용할 수 있으며, 이번 시간에는 해당 View Binding을 어떻게 적용하여 사용하는지에 대해 알아보았습니다.

감사합니다.

댓글