안드로이드/개발관련(Kotlin)

안드로이드 ViewBinding

닉네임못짓는사람 2023. 2. 28. 00:07
반응형

ViewBinding이란?


옛~날 옛적 안드로이드에서 코드적으로 뷰에 접근하기 위해선 아래와 같은 방법을 사용해야했다.

Button button = (Button)findviewById(R.id.button);

위와 같은 방법을 사용하려면 접근하려는 뷰마다 변수를 선언해주고 접근해야 했는데,

그러면 단순히 뷰가 10개만 되어도 변수가 10개가 늘어나기 때문에 매우매우 불편했다.

 

하지만 ViewBinding을 사용하게 되면 위와 같은 불편한 점을 한 번에 없애버릴 수 있게 된다.

 

서론은 여기까지 하고 실제로 ViewBinding을 어떻게 사용하는지에 대해 알아보자.

 

Gradle


ViewBinding을 사용하는 방법은 매우 간단한데, 아래처럼 gradle파일에 단 3줄만 넣어주면 된다.

buildFeatures {
        viewBinding = true
}

이전에는 아래와 같이 선언해야 했는데, 안드로이드 4.0이후로 위와 같이 바뀌었다.

ViewBInding{
	enable = true
}

 

Binding


기존 findviewById는 모든 뷰마다 변수를 선언해줘야 했지만,

ViewBinding에선 binding(보편적으로 사용)변수 하나만을 선언 해주면 된다.

private lateinit var binding: ActivityMainBinding

일단 binding변수는 액티비티 전체에서 접근하는 경우가 많기 때문에 전역 변수로 선언해준다.

그리고 binding의 클래스명은 연결할 액티비티의 파일명을 Pascal Case로 변환하고 뒤에 Binding을 붙인 이름이 된다.

 

위에선 binding을 lateinit으로 선언했기 때문에 실제로 초기화를 해주어야 하는데,

이 작업은 onCreate에서 해주도록 하자.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        
        setContentView(binding.root)
    }

 

여기서 중요한 점 !

기존에는 setContentView의 파라메터가 아래처럼 액티비티 파일의 ID로 되어있었는데,
이를 반드시 binding.root로 바꿔주어야 한다.

setContentView(R.layout.activity_main)

 

이렇게 binding변수를 초기화해주고 나면 아래처럼 이를 통해 다른 뷰들에 접근할 수 있다.

binding.textView.text = "Hello!"

 

Why?


자 그럼 이런 ViewBinding을 쓰면 어떤 점이 좋은가?

가장 직관적인건 위에서 말했던 뷰마다 지정해서 변수를 선언하지 않아도 된다는 점이 있고,

이외에도 아래와 같은 장점들이 있다.

 

  1. Null Safe
    기존에 findViewById를 사용할 때는 뷰가 존재하지 않을 경우 null을 반환하기 때문에 Null체크를 
    프로그래머가 수동으로 해주어야 했는데, viewBinding에선 각 뷰에 대한 참조가 binding클래스에 있기 때문에
    따로 Null체크를 해줄 필요가 없다!

  2. Type Safety
    위에서 말한 Null Safe와 비슷한 상황으로, findViewById를 사용할 때 뷰의 타입을 캐스팅해주는데, 
    여기서 캐스팅하는 타입과 실제 뷰의 타입이 일치하지 않을 경우 에러가 발생할 위험이 있다.
    하지만 1번과 같은 이유로 viewBinding에선 이러한 위험을 방지할 수가 있다!

  3. 성능
    ViewBinding은 성능면에서도 findViewById보다 뛰어난데, 기존에 ID를 통해 뷰를 찾는 과정이
    없어지기 때문에 이 과정에서 일어나는 오버헤드가 사라져서 속도가 더욱 빠르다!

  4. DataBinding과 호환
    ViewBinding말고도 DataBinding이라는게 있는데, 마찬가지로 Binding을 통해서 뷰에 접근하는 방법이다.
    MVVM아키텍처 패턴이 보편화 되면서 DataBinding과 함께 사용하는데,
    다른 글에서 DataBinding은 무엇인지, ViewBinding과는 어떤 차이가 있는지도 살펴보자!

 

ViewBinding 구글 문서 https://developer.android.com/topic/libraries/view-binding?hl=ko 

 

뷰 결합  |  Android 개발자  |  Android Developers

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

developer.android.com

 

반응형