Explict Backing Field 적용하는 법

주효은·2024년 11월 4일
0
  • 글에 들어가기 앞서.. backing property란? 정말 간단하게만 말하면.. 프로퍼티를 외부에서 변경할 수 없도록하고 내부에서만 변경 가능한 프로퍼티를 별도로 선언하는 것을 얘기합니다.
    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이라고 잘 되어있는데ㅠ 뭐가 문제지 찾아봤더니

아직 실험 중인 기능이라 명시적으로 활성화 해줘야한다고 한다..ㅋ

그럼 어떻게 하냐면요!!


Explicit Backing Field 사용하는 방법

1. setting

Setting > Languages & Frameworks > Kotlins > Enable K2 mode 체크!

2. gradle 설정

이제 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.꾸물꿈

  1. 코드를 간소화하고 가독성을 개선할 수 있습니다
  2. 읽기 전용 데이터 스트림을 노출하는 더 깔끔하고 효율적인 방법을 제공합니다.

이런 장점들을 기반으로 Explicit Backing Field가 큰 빛을 발할 것 같슴다!!!

아래에 관련 문서도 첨부하겠습니다

Kotlin’s Explicit Backing Fields: A Cleaner Way to Work with MutableStateFlow

0개의 댓글