개발/Android

Android Room TypeConverters

최동규 2021. 7. 19. 01:01

Room TypeConverters

  • 안드로이드 로컬 데이터베이스인 Room 같은 경우 컬럼에 List나 Data class를 사용하려 하면 에러가 발생하게 됨.
  • 기본적으로 Room은 원시타입(int, short, long ....)과 wrapping 타입만 지원함.

 

 

 

왜 객체 참조를 허용하지 않을까?

Untitled

  • 클라이언트 측에서는 이 유형의 지연 로드가 일반적으로 UI 스레드에서 발생하기 때문에 실행 가능하지 않으며 UI 스레드에서 디스크에 관한 정보를 쿼리하면 상당한 성능 문제가 발생하기 때문에 객체참조를 허용하지 않음
  • 때문에 개발자가 직접 TypeConverters를 구현해주어 Room database에 data class를 사용할 수 있게 해주어야 한다.

 

 

예시) ChatRoom data class

Untitled 1

  • ChatRoom이라는 room entity에 userList라는 객체 배열을 사용하려함.

 

 

 

Converters class

Untitled 2

  • converters 클래스를 만들어 user list → json String, json String → userList가 되도록 gson을 사용하여 구현

 

 

AppDatabase class

Untitled 3

  • app database 클래스에 TypeConverters(Converters::class) 를 추가해주면 정상적으로 Room Database를 사용할 수 있음.