본문 바로가기
안드로이드

[Android] View Binding

by 코딩히어로 2022. 9. 15.
728x90

1


안드로이드가 코틀린 언어를 수용하면서 생긴 뷰 바인딩이라는 이론을 알게 되었는데

기존에 사용하던 뷰 참조 방식에서 정말 놀랍도록 편리합니다

예전 자바 시절부터 코딩을 하던 안드로이드 개발자들이라면 뷰 바인딩이라는 기능이

정말 얼마나 좋은 기능인지 아실 거라고 생각합니다

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    text = (TextView)findViewById(R.id.textv);
    text1 = (TextView)findViewById(R.id.textv2);
    text2 = (TextView)findViewById(R.id.textv3);
}

기존 방식은 layout을 통해 xml을 참조하고 그 안에 있는 뷰들을 하나하나 findViewById를 통해

선언하고 참조를 시켜주어야 비로소 Class내에서 사용이 가능했습니다

 

페이지 구성이 간단한 프로그램에서야 상관없지만 만약에 페이지에 많은 뷰들이 배치되어 있는 경우

하나하나 뷰들을 선언하는 작업만 해도 너무나도 에너지 소비가 컸습니다

이러한 선언과 참조 작업들을 모조리 알아서 해주는 기능이 바로 뷰 바인딩입니다

 


android{
    buildFeatures{
        viewBinding true
    }
}

먼저 app 수준의 build.gradle에 viewBindng를 true로 설정합니다.

정말 간단합니다 build.gradle에 해당 옵션만 true로 선언해주면 모든 뷰 바인딩 사용 준비가 끝입니다

다른 오픈 소스 라이브러리를 이용하시는 분들도 많이 있지만 저는 개인적으로

안드로이드 진영에서 지원하고 있는 뷰 바인딩만큼 편리한 것도 없다 생각됩니다

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

그다음 activity_main.xml을 만들었습니다

뷰 바인딩을 사용하는 데 있어서 xml 코드에서 특별하게 해 줄 것이 없습니다

그냥 평소에 만들던 방식대로 페이지를 구성해주시면 됩니다

 

여기서 한 가지만 주의를 하면 되는데 xml파일의 이름은 규칙이 있습니다

activity_main.xml

activity_test.xml

과 같이 앞쪽에 activity라는 문구로 시작을 한 뒤에 언더바를 넣어줍니다

언더바 뒤쪽 단어는 뷰 바인딩 참조 클래스명입니다

 

즉 activity_main의 경우에는 뷰 바인딩 클래스명이 ActivityMainBinding

activity_test의 경우에는 ActivityTestBinding이 됩니다

ActivityMainBinding mainBinding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(mainBinding.getRoot());

}

마지막으로 뷰 바인딩을 설정하는데 activity_main을 참조할 클래스에서 위와 같이 작성합니다

ActivityMainBinding을 inflate로 객체화하기 때문에 기존과 다르게

activity_main 내에 Text를 선언할 필요 없이 참조가 가능합니다

ActivityMainBinding mainBinding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(mainBinding.getRoot());
    
    mainBinding.text.setText("abc");
    mainBinding.text1.setText("test");
    mainBinding.text2.setText("success");

}

 

728x90
반응형

댓글