class LoginViewModel : ViewModel() {
private val _email = MutableStateFlow("")
val email = _email.asStateFlow()
fun updateEmail(newEmail: String) {
_email.value = newEmail
}
} 이렇게 예시가 있다면, 클래스 내부에서만 _email에 접근해서 데이터를 변경할 수 있고! 외부에서는 email을 통해서 읽어오기만 가능하게 되죠. 그래서 아래 updateEmail 함수 내부에서 _email.value에 newEmail을 값을 넣어주는 겁니다! (email.value가 아니라) 자세한건 공식문서들을 참고해주세여..그동안 나는 이렇게 (주석부분) backing property를 명시해왔는데..!!

이렇게 아래와 같이 명시적인 backing field를 쓸 수 있다구 한다!!
그래서 헐레벌떡 쓰려고 했는데 왜 자꾸 빨간 줄이 뜨지..?

오류 : Kotlin 컴파일러의 FE 1.0 프론트엔드에서 지원하지 않는 기능
버전 문제인가 싶어서 Version Catalog를 봤더니 코틀린 2.0이라고 잘 되어있는데ㅠ 뭐가 문제지 찾아봤더니

아직 실험 중인 기능이라 명시적으로 활성화 해줘야한다고 한다..ㅋ
그럼 어떻게 하냐면요!!

Setting > Languages & Frameworks > Kotlins > Enable K2 mode 체크!
이제 Kotlin2 기능을 사용할 수 있지만, Explict Backing Field와 같은 일부 기능과 같은 경우는 Gradle에 따로 추가해줘야 한다고 합니당
kotlin {
sourceSets.all {
languageSettings.enableLanguageFeature("ExplicitBackingFields")
}
}
app수준의 gradle에 추가를 따로 해주시고 Sync!

우와 이제 오류 안뜬다!!!
그리고 그 전에 사용하던 방식으로 backing property를 사용했을 때는 첫번째과 같이 update를 진행했었는데 이제는 두번째처럼 사용할 수 있겠죠!
[1]

[2]

다시 한 번 정리할게요

원래 쓰던 backing property 방식

Explicit Backing Field 방식
지금은 ViewModel에 email, password뿐이지만.. 나중에 앱이 더 커질 수록 ViewModel에서 많은 데이터들을 관리할텐데요

아어지럽다 from.꾸물꿈
이런 장점들을 기반으로 Explicit Backing Field가 큰 빛을 발할 것 같슴다!!!
아래에 관련 문서도 첨부하겠습니다
Kotlin’s Explicit Backing Fields: A Cleaner Way to Work with MutableStateFlow