본문 바로가기
개발/Android

[Android] ViewBinding 정리

by 1인용 놀이터 2025. 3. 13.
728x90
반응형

ViewBinding

 

ViewBinding 은 뷰와 상호작용하는 코드를 더 쉽게 작성할 수 있도록 도와주는 기능이다.

모듈에서 view Binding을 활성화 하면,

해당 모듈에 있는 각 XML 레이아웃 파일에 대해 바인딩 클래스가 자동으로 생성된다.

바인딩 클래스의 인스턴스에는 해당 레이아웃 내에서 ID가 있는 모든 뷰에 대한 직접적인 참조가 포함된다.

 

대부분의 경우 View Binding은 findViewById를 대체할 수 있다.

 

Setup

View Binding은 모듈 단위로 활성화 된다. 

특정 모듈에서 View Binding을 활성화 하려면, 해당 모듈의 build.gradle 파일에서 viewBinding 빌드 옵션을 true로 설정해야 사용 할 수 있다.

 

1. 안드로이드 스튜디오 4.0 이상인 경우

android {
    ...
    buildFeatures {
        viewBinding true
    }
}


2. 안드로이드 스튜디오 4.0 이하인 경우

android {
    ...
    buildFeatures {
        viewBinding = true
    }
}

 

Usage

 

모듈에서 View Binding이 활성화되면, 해당 모듈에 포함된 각 XML 레이아웃 파일에 대해 바인딩 클래스가 자동으로 생성된다.
각 바인딩 클래스에는 루트 뷰 및 ID가 있는 모든 뷰에 대한 참조가 포함된다.

바인딩 클래스의 이름은 XML 파일의 이름을 Pascal Case(첫 글자를 대문자로 변환)로 변환한 후, "Binding"을 추가하여 생성된다.

예를 들어, result_profile.xml이라는 레이아웃 파일이 있다면, 해당 레이아웃에 대한 바인딩 클래스의 이름은 **ResultProfileBinding**이 된다.

<LinearLayout ... >
    <TextView android:id="@+id/name" />
    <ImageView android:cropToPadding="true" />
    <Button android:id="@+id/button"
        android:background="@drawable/rounded_button" />
</LinearLayout>

 

생성된 바인딩 클래스의 이름은 **ResultProfileBinding**이다.
이 클래스에는 두 개의 필드가 있으며,

  • name이라는 TextView
  • button이라는 Button

이 포함된다.
반면, 레이아웃에 있는 ImageView에는 ID가 없기 때문에 바인딩 클래스에서 참조되지 않는다

모든 바인딩 클래스에는 getRoot() 메서드도 포함되어 있으며, 이를 통해 해당 레이아웃 파일의 루트 뷰에 대한 직접적인 참조를 얻을 수 있다
이 예제에서 ResultProfileBinding 클래스의 getRoot() 메서드는 루트 뷰인 LinearLayout을 반환한다.

 

액티비티(Activity)에서 View Binding 사용하기

액티비티에서 바인딩 클래스의 인스턴스를 설정하려면, onCreate() 메서드에서 다음 단계를 수행하면 된다.

 

1. inflate() 메서드 호출

  • 생성된 바인딩 클래스의 inflate() 메서드를 호출하여 바인딩 클래스의 인스턴스를 생성

2. 루트 뷰 참조 가져오기

  • getRoot() 메서드를 호출하거나, 코틀린에서는 속성(property) 문법을 사용 가능

3. setContentView()에 루트 뷰 전달 

  • 이렇게 가져온 루트 뷰를 setContentView()에 전달하여 화면에 표시

 

private ResultProfileBinding binding;

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


binding.name.setText(viewModel.getName());
binding.button.setOnClickListener(new View.OnClickListener() {
    viewModel.userClicked()
});

 

 

findViewById와 차이점

뷰 바인딩을 사용하면 직접 id를 적고 타입을 정하고 이런 작업을 하지 않아도 된다.

자동으로 클래스 파일을 생성해 주기 때문에이다.

findViewById는 아래와 같은 문제점이 있다.

  • 개발자가 실수로 유효하지 않은 id를 사용하면 null 오류가 발생할 수 있다.
  • 뷰 타입을 잘못 설정하면 cast exception이 발생할 수 있다.
  • 상대적으로 속도가 느리다.
728x90
반응형

'개발 > Android' 카테고리의 다른 글

[Android] Room 개념 정리 및 예제  (1) 2025.04.23
[Android] RecyclerView ?  (0) 2025.04.11
[Android] LayoutInflater 정리  (6) 2025.03.10
[Android] 화면 회전 시 onDestroy 안되도록  (0) 2025.03.06
[Android] View LifeCycle 정리  (0) 2025.03.04