Android

[Android] Unresolved reference: Transformations 에러 해결

yujinius 2024. 11. 16. 23:48

안드로이드 개발 중 LiveData를 변환하려고 Transformations 클래스를 사용했을 때 "Unresolved reference: Transformations" 오류가 발생하는 상황이 있을 수 있다. 그리고 나는 이 오류를 만나버렸다. 이 오류는 Lifecycle 라이브러리의 업데이트로 인해 Transformations 클래스가 제거되면서 발생한 문제이다. 이번 포스팅에서는 이 오류의 원인과 해결 방법을 설명한다.


문제 상황

  • LiveData 데이터를 변환하기 위해 기존에는 Transformations.map을 사용했다. 예를 들어, EditText의 입력 길이가 특정 기준을 초과하는지 실시간으로 검증하는 변환을 작성하려 했다.
  • val isTextLongEnough: LiveData<Boolean> = Transformations.map(inputText) { it.length >= 3 }
  • 그러나 코드 작성 중 Transformations 클래스를 찾지 못하는 오류가 발생하여 다음과 같은 에러 메시지가 출력되었다:
  • Unresolved reference: Transformations

Transformations 클래스란?

  • TransformationsLiveData를 가공할 수 있는 유틸리티 클래스로, LiveData 객체의 변환을 위한 mapswitchMap 메서드를 제공해왔다.
    • map: 기존 LiveData를 기반으로 새로운 LiveData를 생성하는 메서드.
    • switchMap: 기존 LiveData가 변경될 때마다 새로운 LiveData를 반환하여, 다단계 데이터 흐름을 구현할 수 있도록 지원한다.

Transformations를 사용하려 했는가?

  • LiveData는 데이터 변환 기능이 내장되어 있지 않으므로, Transformations 클래스를 통해 변환된 데이터를 반환하는 LiveData를 생성하려 했다.
  • 예를 들어, 사용자가 입력한 텍스트 길이가 3 이상인지 확인하고 그 결과를 TextView에 표시하여 사용자에게 실시간 피드백을 제공하고자 했다.

원인 분석

  • 구글링을 통해 Stack Overflow인프런 커뮤니티에서 Lifecycle 라이브러리 2.6.0 버전부터 Transformations 클래스가 제거되었다는 사실을 알게 되었다.
  • Lifecycle 2.6.0 버전 이상에서는 LiveData 객체의 .map.switchMap 확장 함수를 직접 사용할 수 있게 되어, Transformations 클래스가 더 이상 필요하지 않게 되었다.

해결 방법

Transformations.map을 사용할 수 없으므로, LiveData 객체의 .map 확장 함수를 직접 호출하는 방식으로 코드를 수정하였다.

수정 전 코드

val isTextLongEnough: LiveData<Boolean> = Transformations.map(inputText) { it.length >= 3 }

수정 후 코드

val isTextLongEnough: LiveData<Boolean> = inputText.map { it.length >= 3 }

이제 Transformations 없이도 LiveData 변환이 가능하며, .map 확장 함수를 직접 호출하여 문제를 해결할 수 있다.


결론

  • Lifecycle 2.6.0 버전 이후 Transformations 클래스가 제거되었으므로, .map.switchMap 확장 함수를 LiveData 객체에서 직접 호출하여 사용해야 한다.
  • 이처럼 라이브러리 업데이트에 따라 기존 사용 방법이 변경될 수 있으므로, 최신 문서와 구글링을 통해 변경 사항을 확인하는 것이 중요하다.

Transformations 클래스 관련 오류로 어려움을 겪는 경우, 직접적인 .map.switchMap을 사용하여 문제를 해결할 수 있다.