Android (안드로이드)

[Android] ViewBinding / 뷰 바인딩 / 사용법 / 예제

Oscar:) 2024. 2. 9. 02:39

 

 

이번 포스팅에서는 안드로이드 뷰 바인딩에 대해 알아보자.

 

 

 


 

뷰 바인딩이란?

 

 

공식 문서 ↓

 

 

뷰 결합  |  Android 개발자  |  Android Developers

뷰 결합 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정

developer.android.com

 

 

공식 문서에서는 View Binding을 뷰 결합이라고 번역한다.

본 포스팅에서는 뷰 바인딩이라 부르겠다.

 


 

 

뷰 바인딩은 findViewById()를 대체할 수 있는 View 참조 방식이다.

 

왜 findViewById()를 대체하는지는

'기존 View 참조 방식과의 차이점' 탭에서 설명한다.

 

 

 


 

사용해보자

 

 

✅ build.gradle(모듈 수준)에 다음과 같이 작성해준다.

 

 

● 안드로이드 스튜디오 4.0 이상

android {

    ...

    buildFeatures {
    
        viewBinding true
    
    }

}

 

 

● 안드로이드 스튜디오 3.6 ~ 4.0

android {

    ...

    viewBinding {
    
        enabled true
    
    }

}

 

 

뷰 바인딩은 안드로이드 스튜디오 3.6 버전 이상에서만 사용할 수 있다.

 

 


 

 

✅ Activity & Layout 세팅

 

 

먼저 레이아웃 파일부터 보자.

 

 

activity_view_binding_test.xml

<LinearLayout
...
>

<TextView
    ...
    />
    
<TextView
    android:id="@+id/textView"
    ...
    />
    
<Button
    android:id="@+id/button"
    ...
    />

</LinearLayout>

 

참조가 필요한 View에만 id를 작성해 주었다.

그 외에는 이번 포스팅에 불필요한 내용이니 생략한다.

 

 

레이아웃은 대충 다음과 같이 생겼다.

 

 

 

 

그 다음은 액티비티 파일이다.

 

 

ViewBindingTestActivity.java

ActivityViewBindingTestBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityViewBindingTestBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
}

 

onCreate()에서 setContentView()를 지정해주는 부분을 위와 같이 변경해준다.

 

 

바인딩 클래스는 xml 파일 이름을 카멜 표기법으로 변환하고,
끝에 'Binding'을 추가하여 자동 생성된다.

그렇기에 위처럼 'ActivityViewBindingTestBinding' 클래스의 객체를 선언할 수 있다.

 

 

기존에는 setContentView()에 레이아웃 파일을 통째로 지정했지만,
바인딩 할 레이아웃을 inflate(실체화)하여 루트 뷰를 지정해준다.

 

 

 


 

 

✅ View 참조하여 사용하기

 

 

위 과정을 마쳤다면 이제 binding 객체를 통해

View를 곧바로 참조하여 사용할 수 있다.

 

binding.button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        binding.textView.setText("오스카");
    }
});

 

위 처럼 findViewById()를 사용하지 않고도 View의 id를 통해 참조할 수 있다.

 

 

결과)

 

 

 

 


 

기존 View 참조 방식과의 차이점

 

 

✅ 코드량 감소

 

ViewBinding을 사용하면 비교적 코드량을 감소시킬 수 있다.

 

setContentView() 세팅하는 부분을 제외하고 보겠다.

 

 

● findViewById()

TextView textView;
Button button;

textView = findViewById(...);
button = findViewById(...);

button.setOnClickListener(...)

 

 

● ViewBinding

...Binding binding;

binding.button.setOnClickListener(...)

 

 

한 눈에 비교해봐도 ViewBinding이 훨씬 깔끔하다.

레이아웃에 View가 많으면 많을수록 이 차이는 더 극대화된다.

 

 

 

코드가 감소하는 것 이외에도 또 다른 장점이 존재한다.

 

 

✅ Null Safe

 

뷰 바인딩은 뷰의 직접 참조를 생성하므로, 유효하지 않은 뷰로 인해

Null Pointer Exception이 발생할 위험이 없다.

 

 

 

✅ Type Safe

 

바인딩 클래스에서 이미 xml 파일에 있는 뷰의 타입을 일치시키기 때문에

Class Cast Exception이 발생할 위험이 없다.

 

 

 


 

 

 

 

이번 포스팅에서는 뷰 바인딩에 대해 알아보았다.

 

 

처음 사용하는 문법이라면 어색하겠지만 자주 사용하다보면 익숙해진다.

 

이제 findViewById()는 그만 괴롭히고 바인딩에 적응해보는 것도 좋다.