본문 바로가기
개발/Android

[Android] kotlin-android-extensions deprecated

by blacktree 2023. 2. 20.
반응형

 

안녕하세요! kotlin-android-extensions가 deprecate됨에 따라 이를 해결하는 방법에 대해 알려드리겠습니다.

1. kotlin-android-extensions이란?

kotlin-android-extensions는 안드로이드 스튜디오에서 Kotlin을 사용할 때, XML 파일에서 정의된 View들을 코틀린 코드에서 직접 참조할 수 있게 해주는 라이브러리입니다. 예를 들어, XML 레이아웃 파일에서 버튼을 정의하고, id를 부여하면, findViewById() 메소드를 사용하지 않고, 코틀린에서 해당 버튼을 직접 참조할 수 있습니다.

하지만, 2020년 11월에 공개된 안드로이드 스튜디오 4.1부터, kotlin-android-extensions가 deprecate되었습니다.

2. 왜 kotlin-android-extensions가 deprecate되었을까?

kotlin-android-extensions가 deprecate된 이유는 크게 2가지입니다.

첫째, kotlin-android-extensions를 사용하면, View들이 lazy initialization되어 비효율적인 메모리 사용이 발생합니다. 이는 특히, View가 많은 레이아웃에서 앱의 성능을 저하시킬 수 있습니다.

둘째, kotlin-android-extensions는 빌드 시간을 더 오래 소요하도록 만듭니다. 이는 앱을 빌드할 때 매우 불편하며, 특히, 대형 프로젝트에서는 더 큰 문제가 될 수 있습니다.

이러한 문제로 인해, kotlin-android-extensions는 deprecate되었으며, 대신에 안드로이드에서는 View Binding 또는 Data Binding을 권장하고 있습니다.

3. View Binding 사용하기

View Binding은 레이아웃 파일에서 정의된 View들을 코틀린 클래스에서 바인딩하는 라이브러리입니다. View Binding을 사용하면, lazy initialization을 방지할 수 있으며, 컴파일 시간에 바인딩이 발생하므로 빌드 시간도 단축됩니다.

View Binding을 사용하려면, 다음과 같이 설정해야 합니다.

 

3.1. 모듈 수준의 build.gradle 파일에서 다음 코드를 추가합니다.

viewBinding{
    enabled = true
}

3.2. 바인딩 클래스를 사용하여 View를 참조합니다.

바인딩 클래스는 레이아웃 파일의 이름과 "Binding"을 결합하여 자동으로 생성됩니다. 예를 들어, activity_main.xml 파일에 대한 바인딩 클래스는 ActivityMainBinding입니다. 이를 사용하여 해당 레이아웃에 정의된 View들을 직접 참조할 수 있습니다.

예를 들어, activity_main.xml 파일에서 TextView의 id를 "textView"로 설정한 경우, 다음과 같이 해당 TextView를 참조할 수 있습니다.

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

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

        binding.textView.text = "Hello, world!"
    }
}

4. 결론

kotlin-android-extensions가 deprecate됨에 따라, 안드로이드에서는 View Binding 또는 Data Binding을 권장합니다. View Binding은 View를 직접 참조할 수 있는 간단한 방법을 제공하며, Data Binding은 View와 데이터를 결합하여 더 많은 기능을 제공합니다. 둘 다 lazy initialization과 빌드 시간 문제를 해결하여 성능과 효율성을 향상시킵니다.

 

 

 

 
728x90
반응형

댓글