Extension에서 ViewBinding으로 고치는 작업(FindViewByID)

가온·2022년 10월 8일
0

Kotlin의 Extension 기능이 사라진다는 말을 나중에 알아 그 코드들을 모두 ViewBinding으로 고쳤었습니다.

ViewBinding이란?

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

사용법

1) build.gradle

안드로이드 스튜디오 버전이 4.0 이상이라면

android {
	buildFeatures{
    	viewBinding = true
	}
}

안드로이드 스튜디오 버전이 4.0 이하라면

android {
	viewBinding{
    	enabled true
	}
}

2) Binding Class

모듈에 뷰 결합을 사용하도록 설정되면 모듈에 포함된 각 XML 레이아웃 파일의 결합 클래스가 생성됩니다.
각 결합 클래스에는 루트 뷰 및 ID가 있는 모든 뷰의 참조가 포함됩니다.

<결합클래스 이름 생성 규칙>
XML파일의 이름을 카멜 표기법으로 변환하고 끝에 'Binding'을 추가

ex). activity_main.xml -> ActivityMainBinding

3) Activity에서 ViewBinding 사용하기

Activity의 onCreate() method에서 다음 단계를 수행합니다.
(1) inflate는 xml에 있는 뷰를 객체화해줍니다.
(2) 루트 뷰를 넘겨줍니다.
(3) 루트 뷰를 setContentView()에 전달하여 화면상의 활성뷰로 만듭니다.

private lateinit var orderBinding : ActivityOrderBinding

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        orderBinding = ActivityOrderBinding.inflate(layoutInflater)
        val view = orderBinding.root
        setContentView(view)
}

다음은 ViewBinding을 이용하여 작성한 코드의 예시입니다.

4) Fragment에서 ViewBinding 사용하기

Fragment의 onCreateView() method에서 다음 단계를 수행합니다.
(1) inflate() 메서드를 호출합니다. 그러면 Fragment에서 사용할 Binding Class instance가 생성됩니다.
(2) 루트 뷰 참조를 가져옵니다.
(3) onCreateView() 메서드에서 root view를 반환하여 화면상의 활성뷰로 만듭니다.

findViewByID와의 차이점

1) Null 안전

ViewBinding은 View의 직접 참조를 생성하므로 유효하지 않은 View ID로 인해 null 포인터 예외가 발생할 위험이 없습니다. 또한 레이아웃의 일부 구성에만 뷰가 있는 경우 BindingClass에서 참조를 포함하는 필드가 @Nullable로 표시됩니다.

2) 유형 안전

각 Binding Class에 있는 필드의 유형이 XML 파일에서 참조하는 뷰와 일치합니다. 즉, 클래스 변환 예외가 발생할 위험이 없습니다.

DataBinding과의 차이점 (View Binding의 이점)

View Binding과 DataBinding 모두 View를 직접 참조하는데 사용할 수 있는 Binding Class를 생성합니다. 하지만 ViewBinding은 보다 단순한 사용 사례를 처리하기 위한 것이며 다음과 같은 이점을 제공합니다.

1) 더 빠른 컴파일

View Binding에는 주석 처리가 필요하지 않으므로 컴파일 시간이 더 짧습니다.

2) 사용 편의성

View Binding에는 특별히 태그된 XML 레이아웃 파일이 필요하지 않으므로 앱에서 더 신속하게 채택할 수 있습니다. 모듈에서 뷰 결하블 사용 설정하면 모듈의 모든 레이아웃에 View Binding이 자동으로 적용됩니다.

반대로 View Binding에는 Data Binding과 비교할 때 다음과 같은 제한사항이 있습니다.

  • View Binding은 레이아웃 변수 또는 레이아웃 표현식을 지원하지 않으므로 XML 레이아웃 파일에서 직접 동적 UI 콘텐츠를 선언하는 데 사용할 수 없습니다.
  • 보기 결합은 양방향 데이터 결합을 지원하지 않습니다.

위 상황을 고려할 때, 일부 사례에서 프로젝트에 View Binding과 Data Binding을 모두 사용성에 따라 사용하는 것이 좋습니다.

고급 기능이 필요한 레이아웃 : Data Binding
고급 기능이 필요없는 레이아웃 : View Binding

profile
코딩기딩기딩기딩

0개의 댓글