본문 바로가기
Android/Android Development

Android Room - Entity Annotations

by 2Plus 2020. 6. 4.

Photo by [deborah cortelazzi] on [Unsplash]

 Room Entity에 사용할 수 있는 annotation들은 굉장히 많다. 그 중에 사람들이 자주 사용하는 annotation들에 대해서 짧게 정리해보려 한다.

 

 

Entity

 

 먼저 class를 Room Entity로 선언하기 위해서 기본적으로 Entity Annotation을 지정해줘야 한다.

 

 

 

 Entity Annotation 안에서 위와 같이 table 이름을 지정해 줄 수 있다. 지정하지 않으면 클래스 이름을 그대로 table 이름으로 사용하게 되는데, 일반적으로는 table 이름을 직접 지정하는 경우가 더 많을 것이다. 이럴 때는 위와 같이 사용하면 된다.

 

 

PrimaryKey

 

 필드를 DB의 기본 키로 설정할 수 있다. DB가 해당 키를 자동으로 증가시키게 하려면 autoGenerate를 true로 하면 되고, 키를 직접 관리하는 경우에는 autoGenerate를 false로 설정하고 직접 관리하면 된다.

 

 

ColumnInfo

 

 SQL에서는 밑줄을 사용해서 작명을 하는 것이 일반적이고, Kotlin에서는 대문자를 이용하여 작명을 하는 것이 일반적이기 때문에 이 두 가지가 서로 다르다. 한쪽을 따르면 다른 쪽에서 이상해보일 수 있기 때문에 Kotlin data class에서는 각 변수 이름을 그대로 사용하고, ColumnInfo annotation에서 name을 지정해주어 DB에서는 다른 이름을 사용하게 할 수 있다. 이렇게 사용하면 어떻게 매칭되는 지도 직관적으로 알 수 있으며 각 영역에서 각 스타일에 맞게 작명을 할 수 있다.

 

 

Ignore

 

 Database에 들어갈 필요가 없는 경우에는 Ignore annotation을 사용하여 DB에서 제외시킬 수 있다.

 

 

Embedded

 

 data class 안에서 기본 자료형이 아닌, 다른 data class 등을 멤버로 가지고 있는 경우에 편리하게 사용할 수 있도록 도와주는 annotation이다. 이렇게 @Embedded를 사용하면 위의 경우 date는 필드로 저장되고, 자동으로 쿼리가 된다. DB로부터 읽어 올 때는 date가 알아서 맵핑까지 되어 Movie 객체가 만들어진다.

 

 

ForeignKey

 

 Entity에 foreign key들을 지정할 수 있다. 사람과 자동차 data class를 만들고, 사람이 자동차를 가지고 있는 예시 코드이다. 사람이 삭제 되면 그 사람이 소유한 차도 자동으로 삭제되도록 하고 싶은 경우에 foreign key를 사용할 수 있다. foreign key로 굉장히 많은 것들을 할 수 있는데 안드로이드 개발자 페이지를 가보면 더 많은 것을 확인할 수 있다.

https://developer.android.com/reference/androidx/room/ForeignKey

 

반응형

댓글