[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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바