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이 발생할 수 있다.
- 상대적으로 속도가 느리다.
'개발 > 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 |