[kotlin] 데이터바인딩을 이용한 폼 유효성 검사

폼 유효성 검사는 사용자가 입력한 데이터가 예상대로 유효한지 확인하는 중요한 작업입니다. 안전하고 정확한 데이터 저장을 위해 필수적입니다. Kotlin의 데이터바인딩 라이브러리를 사용하면 XML 레이아웃과 Kotlin 코드를 연결하여 폼 유효성 검사를 쉽게 수행할 수 있습니다. 이 글에서는 Kotlin을 사용하여 데이터바인딩을 통한 폼 유효성 검사를 알아보겠습니다.

1. 데이터바인딩 설정

먼저, build.gradle 파일에 데이터바인딩을 활용할 수 있도록 설정해야 합니다.

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

2. XML 레이아웃 설정

다음으로, XML 레이아웃 파일에서 데이터바인딩을 활용할 수 있도록 설정하고, 폼 입력 필드와 해당 필드에 대한 에러 메시지를 보여줄 수 있는 뷰를 준비합니다.

<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable
           name="viewModel"
           type="com.example.ViewModel" />
   </data>
   <LinearLayout
       ...
       android:layout_width="match_parent"
       android:layout_height="match_parent">

       <EditText
           ...
           android:text="@={viewModel.username}" />
       <TextView
           ...
           android:error="@{viewModel.usernameError}" />
       ...
   </LinearLayout>
</layout>

3. ViewModel 작성

다음으로, 해당 폼에 대한 유효성을 검사할 ViewModel을 작성합니다. ViewModel은 ObservableField와 ObservableBoolean을 이용하여 사용자 입력값과 유효성 여부를 추적합니다.

class ViewModel {
    val username = ObservableField<String>("")
    val usernameError = ObservableField<String>("")

    fun validateUsername() {
        val input = username.get()
        if (input.isNullOrBlank()) {
            usernameError.set("Username cannot be empty")
        } else {
            usernameError.set("")
        }
    }

    val isFormValid = ObservableBoolean(false)

    fun validateForm() {
        isFormValid.set(usernameError.get().isNullOrBlank())
    }
}

4. XML과 ViewModel 연결

마지막으로, XML 레이아웃과 ViewModel을 연결합니다. XML 파일에 정의된 뷰를 ViewModel과 연결하고, 입력값 변화에 따라 유효성 검사 메소드를 호출하도록 설정합니다.

class MainActivity : AppCompatActivity() {
    lateinit var binding: ActivityMainBinding
    private val viewModel = ViewModel()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.viewModel = viewModel

        binding.username.addTextChangedListener {
            viewModel.username.set(it.toString())
            viewModel.validateUsername()
            viewModel.validateForm()
        }

        binding.isFormValidButton.isEnabled = viewModel.isFormValid.get()
    }
}

이제 데이터바인딩을 통해 폼 유효성 검사를 구현하는 방법을 알게 되었습니다. 데이터바인딩은 코드를 더 간결하고 유지보수하기 쉽게 만들어주며, Kotlin과 함께 사용하면 더욱 효율적으로 폼 유효성 검사 기능을 구현할 수 있습니다.

참고: