[Android] 안드로이드 Kotlin ViewBinding 사용하기

2022. 5. 21. 11:08·Android/Others
반응형

안녕하세요 오늘은 ViewBinding 사용법을 알아보고자 합니다.

ViewBinding은 기존의 findViewById의 문제점들이 개선이 되었고, 속도가 빠르고, 사용이 간편하다는 장점이 있습니다.

사용 전 차이점을 살펴보자면

// findViewById
val textView = findViewById<TextView>(R.id.TextView)
textView.text = "Hello JDroid!"

// ViewBinding
binding.textView.text = "HelloJDroid!"

findViewById의 경우에는 모든 뷰들을 연결시켜 변수를 선언해주어야 하지만 ViewBinding의 경우에는 연결되어있는 뷰들을 바로 사용할 수 있기 때문에 아주 간단하게 사용할 수 있습니다.

 

근데 사용도 간편한데 왜 ViewBinding이 더 빠를까? 

findViewById -> 모든 뷰들의 Id에 접근하여 확인을 합니다. 즉 내가 사용하고자 하는 레이아웃뿐만이 아니라 다른 레이아웃들에도 접근을 하여 Id를 체크한다는 것입니다.

ViewBinding -> 내가 사용하고자 하는 레이아웃만 연결이 되기 때문에 내가 만들어 놓은 layout이 많을수록 차이는 더 커지게 될 것입니다.

 

NullPointerException 안전

findViewById는 잘못된 Id를 사용할 경우 NullPointerException이 발생합니다. 하지만 ViewBinding의 경우에는 Id를 잘 못 적게 되면 바로 Error가 나타나 걱정이 없습니다.

 

CastException 안전

findViewById는 View를 Cast 해주어야 합니다. 위 코드에서 보면 findViewById <TextView>로 View의 타입을 TextView로 적어주었죠 하지만 저 뷰가 만약에 TextView가 아니라면? 바로 Exception이 발생하게 됩니다. 반면 ViewBinding은 자동으로 Cast가 되어있기 때문에 Exception이 발생할 일이 없습니다.

 

이제 사용해보겠습니다!

 

먼저 프로젝트를 연 후

 

Gradle Scripts -> build.gradle(Module: )로 들어가 줍니다.

android {
 ...
	buildFeatures {
    	viewBinding true
    }
}

이렇게 삽입해 줍니다. 그리고 상단에 보면 알림창이 뜰 겁니다.

Sync Now를 클릭하여 줍니다.

Sync까지 완료되면 이제 ViewBinding을 사용할 수 있습니다.

 

MainActivity으로 들어가 보겠습니다.

java -> package name -> main -> activity -> MainActivity.kt

class MainActivity: AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
    	super.onCreate(savedInstanceState)
     	setContentView(R.layout.activity_main)
        
        val textView = findViewById<TextView>(R.id.textView)
        textView.text = "Hello JDroid!"
    }
}

기존의 이 코드에서

class MainActivity: AppCompatActivity() {
	
    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

	override fun onCreate(savedInstanceState: Bundle?) {
    	super.onCreate(savedInstanceState)
     	setContentView(binding.root)
        
        binding.textView.text = "Hello JDroid!"
    }
}

이렇게 변경하면 됩니다!

 

그리고 binding을 by lazy 대신 lateinit을 사용할 수 있습니다.

class MainActivity: AppCompatActivity() {

	private lateinit var binding: ActivityMainBinding

	override fun onCreate(savedInstanceState: Bundle?) {
    	super.onCreate(savedInstanceState)
        
        binding = ActivityMainBinding.inflate(layoutInflater)
        
     	setContentView(binding.root)
        
        val textView = findViewById<TextView>(R.id.textView)
    }
}

두 코드의 차이점을 말씀드리겠습니다

 

먼저 by lazy는 변수가 처음 사용될 때 자동으로 초기화합니다.

즉 setContentView(binding.root) 이때 초기화되는 것입니다.

 

lateinit은 나중에 내가 직접 초기화하겠다고 하는 것입니다.

그래서 setContentView(binding.root)를 하기 전에 제가 직접 변수를 초기화해준 것입니다.

 

저는 개인적으로 조금 더 편리한 by lazy를 선호하는 편입니다. 

그리고 두 가지 다 주의할 점이 있습니다. 

by lazy의 경우에는 초기화할 수 없을 때 사용을 하게 되면 Exception이 발생합니다.

그리고 lateinit은 초기화를 하지 않고 사용하였을 때 Exception이 발생합니다. 때문에 Exception이 발생하지 않도록 주의해서 사용하시길 바랍니다!

 

안드로이드에 관련한 궁금한 사항을 댓글이나 방명록에 작성해 주시면 답변드리겠습니다~!

 

반응형

'Android > Others' 카테고리의 다른 글

[Android Studio] 안드로이드 스튜디오 Logcat(로그캣) 색상 설정  (0) 2022.06.01
[Google Fonts] 구글 폰트, 구글 아이콘 무료로 다운로드 받기 - 아이콘  (0) 2022.05.19
[Google Fonts] 구글 폰트, 구글 아이콘 무료로 다운로드 받기 - 폰트  (0) 2022.05.19
[Android Studio] 안드로이드 스튜디오 프로젝트 생성하기  (0) 2022.05.18
'Android/Others' 카테고리의 다른 글
  • [Android Studio] 안드로이드 스튜디오 Logcat(로그캣) 색상 설정
  • [Google Fonts] 구글 폰트, 구글 아이콘 무료로 다운로드 받기 - 아이콘
  • [Google Fonts] 구글 폰트, 구글 아이콘 무료로 다운로드 받기 - 폰트
  • [Android Studio] 안드로이드 스튜디오 프로젝트 생성하기
W_JIN
W_JIN
안드로이드 개발을 공부하는 3년차 개발자입니다.
  • W_JIN
    W.JIN
    W_JIN
  • 전체
    오늘
    어제
    • 전체 (24)
      • Android (23)
        • Design (10)
        • Libraries (8)
        • Others (5)
      • Flutter (0)
        • Design (0)
        • Libraries (0)
        • Others (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    뷰
    COLOR
    fonts
    사용법
    아이콘
    Grid
    종류
    안드로이드
    frame
    permission
    layout
    방법
    constraint
    Android
    iCon
    linear
    contact
    연락처
    contacts
    textview
    다운로드
    권한
    안드로이드 스튜디오
    parcelize
    사용 방법
    사용방법
    android studio
    레이아웃
    설정
    색상
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
W_JIN
[Android] 안드로이드 Kotlin ViewBinding 사용하기
상단으로

티스토리툴바