안드로이드 개발 중 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 클래스란?
Transformations는LiveData를 가공할 수 있는 유틸리티 클래스로,LiveData객체의 변환을 위한map및switchMap메서드를 제공해왔다.map: 기존LiveData를 기반으로 새로운LiveData를 생성하는 메서드.switchMap: 기존LiveData가 변경될 때마다 새로운LiveData를 반환하여, 다단계 데이터 흐름을 구현할 수 있도록 지원한다.
왜 Transformations를 사용하려 했는가?
LiveData는 데이터 변환 기능이 내장되어 있지 않으므로,Transformations클래스를 통해 변환된 데이터를 반환하는LiveData를 생성하려 했다.- 예를 들어, 사용자가 입력한 텍스트 길이가 3 이상인지 확인하고 그 결과를
TextView에 표시하여 사용자에게 실시간 피드백을 제공하고자 했다.
원인 분석
- 구글링을 통해 Stack Overflow와 인프런 커뮤니티에서
Lifecycle라이브러리 2.6.0 버전부터Transformations클래스가 제거되었다는 사실을 알게 되었다. Lifecycle2.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 확장 함수를 직접 호출하여 문제를 해결할 수 있다.

결론
Lifecycle2.6.0 버전 이후Transformations클래스가 제거되었으므로,.map과.switchMap확장 함수를LiveData객체에서 직접 호출하여 사용해야 한다.- 이처럼 라이브러리 업데이트에 따라 기존 사용 방법이 변경될 수 있으므로, 최신 문서와 구글링을 통해 변경 사항을 확인하는 것이 중요하다.
Transformations 클래스 관련 오류로 어려움을 겪는 경우, 직접적인 .map과 .switchMap을 사용하여 문제를 해결할 수 있다.