Kotlin_Android 앱 개발/코틀린 익히기

01. viewbinding + 이전 책들과 블로그 내용이 안 되는 이유

하다블 2024. 1. 6. 16:57
반응형

안녕하세요. 하다블입니다.

최근 코틀린을 공부하면서 C++, python을 공부할 때랑은 다른 몇 가지 재미있는 요소들이 있어 기록하고자 합니다. 하지만 그전에 중요한 부분을 먼저 포스팅하려고 합니다. 바로 시작하자마자 막히게 했던 viewbinding에 대한 이야기입니다.

코틀린을 공부하면서 가장 많이 막힌 부분은 바로

 kotlin-android-extensions 라이브러리입니다...

kotlin-android-extensions가 무슨 라이브러리인지 이해하기 위해서는  기본적인 코틀린 구동 방식에 대해 이해할 필요가 있습니다.

가장 중요한 포인트는 Kotlin은 프로그래밍 언어이지, 앱을 뚝딱 만들어내는 시스템이 아니라는 점입니다.

웹 프로그래밍(Frontend Backend)을 하신 분들은 아시겠지만 JavaScript만 사용한다고 홈페이지가 혼자서 뚝딱 만들어지지 않고 HTML을 이용해서 만들어갑니다. Kotlin도 마찬가지입니다. XML파일에서 정의된 요소들을 연동해서 사용해야 합니다.

간단하게, Kotlin이 JS역할을, XML이 HTML역할을 해주고 있다고 생각하면 됩니다.

그리고 이 둘을 연결해 주는 라이브러리가 바로 kotlin-android-extensions였던 겁니다.  하지만 개발사에서 효율성과 안정성을 이유로 이 라이브러리를 제거하고 viewbinding을 사용하길 권유했습니다.

(개발자가 알려준 문제들은 전역 namespace 오염, null 허용 여부 정보를 노출하지 않음, kotlin에서만 작동함이었습니다.)

하지만 이 일이 몇 년 전의 일이라는 것입니다. 이전부터 안드로이드 개발을 했던 분들이라면 여기에서 문제가 발생합니다.

아마 모든 프로그래밍 언어를 공부할 때 다들 여러 블로그, StackOverFlow와 같은 사이트를 참고하면서 공부할 것입니다. 또는 책을 이용하거나 강의를 들을 수도 있습니다. 하지만 이전에 작성된 포스트 또는 영상의 경우, 모두 kotlin-android-extensions를 이용하고 있습니다. 

저 역시 2021년에 초본 발행된 코틀린 책을 구입하였는데, 여기에서도 viewbinding이 아닌 기존 방식을 사용하고 있어 공부할 때 바로 막히게 되었습니다. 


따라서 viewbinding을 이용해서 이전 강의 또는 포스트들을 바로바로 변경해 가면서 사용해야 합니다. 먼저, viewbinding을 사용하기 위해서는 Gradle Scripts - build.gradle(Module:App)을 켜주시길 바랍니다.

아마 다음과 같이 나올 겁니다.(targetSdk, compileSdk는 기본값이 33이지만 34로 수정해서 사용했습니다. 빨간 줄이 뜨더라도 문제없이 작동합니다.)

여기서 android- buildTypes에 viewbinding을 추가할 것입니다.

        buildFeatures{
            viewBinding=true
        }

그다음 손 봐주어야 하는 부분은 MainActivity.kt입니다. 

Empty Views Activity 기준으로, 생성하면 초기 코드는 다음과 같습니다.

 

여기서 MainActivity 함수에 다음과 같은 변수를 입력해 주시길 바랍니다.

    lateinit var binding: ActivityMainBinding

복사 붙여 넣기를 할 경우 라이브러리가 자동으로 import 되지 않기 때문에 하나씩 입력하면서 자동완성을 이용하시길 바랍니다.

그리고 onCreate 안에 다음과 같은 코드를 입력해 주시길 바랍니다.

        binding=ActivityMainBinding.inflate(layoutInflater)

그리고 마지막 serContentView의 괄호 안을 binding.root로 수정해 주시길 바랍니다. 그러면 다음과 같이 수정할 수 있습니다.

import가 하나 추가되었는데, 제가 위에서 말한 부분이 바로 저 부분입니다. 코드를 복사 붙여 넣기 하면 databinding 부분이 자동으로 import 되지 않기 때문에 이 점에 유의하시길 바랍니다.

 

이제 나머지는 크게 다르지 않습니다. 하지만 XML에서 값을 가져올 때 차이가 있습니다.

XML에 버튼을 만들고 id가 button인 친구가 있다고 가정하겠습니다.

그리고 이 버튼이 눌렸을 때 Toast를 이용해서 알림을 주는 방식은 다음과 같았습니다.

//kotlin-android-extension 이용했을 때의 방식

button.setOnClickListener{

	//Toast.makeText 이하 중략...
    
}

하지만 viewbinding을 이용하면 바로 button을 부르지 않고 앞에 binding을 추가해주어야 합니다.

//viewbinding 이용할 때의 방식

binding.button.setOnclickListener{
	//Toast.makeText 이하중략...
}

다른 id를 부를 때에서 binding을 붙여 사용해야 합니다. 

아직 기초적인 공부를 하고 있어서 더 심화되었을 때 어떻게 달라질지는 모르지만 달라지거나 알게 되는 대로 포스트를 남겨보고자 합니다. 

 

또한 질문이나 다른 방식, 제 방식에 존재하는 오류 또한 말씀해 주시면 감사하겠습니다. 더 열심히 공부하는 사람이 되도록 하겠습니다. 감사합니다.

반응형