Android(Kotlin) - 코틀린 사용 설정하기, 뷰 바인딩으로 레이아웃 연결 (View Binding)

반응형

코틀린 사용을 위한 기본 설정

build.gradle(Module)

  • 1. 왼쪽의 프로젝트 디렉토리에서 Gradle Scripts 선택
  • 2.build.gradle 파일에 뷰 바인딩 코드 입력
    • android에서 아래의 코드를 추가
android {
    buildFeatures {
        // 뷰 바인딩
        viewBinding true
    }
...
}
  • 3.Sync Now

 

뷰 바인딩이란? (View Binding)

  • 화면에 보여줄 뷰(View)와 작성하는 소스 코드를 연결해주는 것

레이아웃 파일 연결

연결 할 레이아웃 확인

(필자는 기본 activity_main으로 진행)

  • res - layout

 

레이아웃 연결

  • MainActivity.kt
    • 위에서 build.gradle 파일에 뷰 바인딩을 설정하였으므로 레이아웃 파일을 바인딩하여 변수 생성
    • 레이아웃의 이름은 바인딩의 자동 변환 규칙에 따라 자동으로 이름 지정
      • 레이아웃 파일명 + Binding (레이아웃 파일의 첫 글자와 언더바 다음 영문을 대문자로 변환)
      • 이해가 어렵다면 직접 안드로이드 스튜디오에서 자신의 레이아웃 파일을 확인하고 레이아웃 파일의 앞부분을 대문자로 바꿔 코드를 작성해보면 자동 완성이 뜹니다. (ActivityMain 입력시 ActivityMainBinding)
// activity_main.xml 바인딩 = ActivityMainBinding
// 자동 변환 = 파일명(activity_main) + Binding

// 바인딩 변수 선언
val binding = ActivityMainBinding.inflate(layoutInflater)

 

레이아웃과 바인딩 된 변수를 코드와 연결

  • MainActivity.kt
    • binding 변수 사용 (필자는 val binding으로 변수를 지정, 사용자에 따라 다르게 정의)
    • 화면 보여질 레이아웃 설정
      • setContentView의 인자 값을 바인딩한 변수 사용 > setContentView(binding.root)
      • 참고 : 레이아웃 파일은 res - layout에서 확인 가능하며, 원하는 레이아웃 파일을 바인딩 자동 변환 규칙에 따라 확인 후 필요에 맞게 연결하여 화면 디자인을 하시면 됩니다.
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        // 레이아웃 바인딩
        val binding = ActivityMainBinding.inflate(layoutInflater)
        
        // 뷰 화면에 보여질 레이아웃 설정
        setContentView(binding.root)
        
        // 코드 작성
    }
}

뷰 바인딩을 하는 이유?

  • 코틀린에서는 효율적으로 사용하기 위해 코틀린 익스텐션(Kotlin Extension)이라는 기능을 제공
  • 코틀린 익스텐션의 단점을 보완하고자 뷰 바인딩 방식을 사용
    • 최근 코틀린 익스텐션의 사용을 권장하지 않으며 뷰 바인딩 방식을 사용하여 뷰와 코드 연결 권장

코틀린 익스텐션을 왜 권장하지 않을까?

  • 코틀린 익스텐션의 장점
    • 자바 코드로 작성시 findViewById로 일일이 UI 객체를 정의해줘야하는 코드의 재사용을 줄이기 위함
      • 때문에 레이아웃 파일들의 UI ID로 바로 코딩 가능
  • 코틀린 익스텐션의 단점
    • 코틀린에서만 제공하며 자바와 호환이 불가능
    • 일부 상황에서 뷰를 찾을 수 없는 오류가 발생 할 경우, 디버깅의 어려움
    • 뷰의 잘못된 호출로 인한 높은 버그 발생 가능성
    • 다른 모듈에서 뷰에 대한 접근이 불가능

장점으로 인하여 사용되었지만, 오히려 장점이 단점이 되어 사용을 권장하지 않고 있다.

반응형