주석 유형 RealmModule
io.realm.annotations
구현된 인터페이스:
기본적으로 Realm은 RealmObject를 확장하는 모든 클래스를 프로젝트에서 저장할 수 있습니다. 하지만, Realm이 클래스의 하위 집합만 포함하도록 제한하거나 라이브러리 프로젝트와 앱 프로젝트 간에 클래스를 공유하려면 RealmModule을 사용해야 합니다. RealmModule은 다음과 결합할 수 있는 RealmObject를 확장하는 클래스의 collection입니다. 다른 RealmModule을 사용하여 Realm에 대한 스키마를 생성합니다. 이렇게 하면 해당 Realm의 버전 관리 및 마이그레이션을 더 쉽게 제어할 수 있습니다.
RealmModule은 라이브러리 모듈일 수도 있고 앱 모듈일 수도 있습니다. 구분은 library = true
를 설정합니다. library = true
설정은 일반적으로 라이브러리 작성자에게만 해당됩니다. 자세한 내용은 아래를 참조하세요.
현재는 하나의 파일에 여러 개의 RealmModule 선언을 가질 수 없습니다. 두 개 이상의 RealmModule이 있는 경우 각 모듈에 대해 별도의 Java 파일을 사용해야 합니다.
RealmModule과 라이브러리
Realm의 기본 동작은 프로젝트에서 RealmObject를 확장하는 모든 클래스를 포함하는 DefaultRealmModule
이라는 RealmModule을 자동으로 생성하는 것입니다. 이 모듈은 Realm에서 자동으로 인식됩니다.
이 동작은 Realm을 사용하는 라이브러리 프로젝트와 앱 프로젝트를 결합할 때 문제가 발생합니다. 이는 라이브러리 프로젝트와 앱 프로젝트 모두에 대해 DefaultRealmModule
이(가) 생성되어 중복 클래스 정의 오류로 인해 프로젝트가 실패하기 때문입니다.
라이브러리 작성자는 library = true
가 설정된 명시적 모듈을 사용하여 이러한 충돌을 방지할 책임이 있습니다. 이렇게 하면 라이브러리 프로젝트에 대한 DefaultRealmModule 생성이 비활성화되고 라이브러리가 Realm을 사용하는 앱 프로젝트에 포함될 수 있습니다. 즉, 내부적으로 Realm을 사용하는 라이브러리 프로젝트는 RealmConfiguration.modules()
을 사용하여 특정 모듈을 지정해야 합니다.
앱 개발자는 암시적으로 DefaultRealmModule
을(를) 사용하므로 모듈을 지정할 필요가 없지만 이제 RealmConfiguration.addModule()
을 사용하여 스키마에 라이브러리 프로젝트 클래스를 추가할 수 있습니다.
선택적 요소 요약
수정자 및 유형 | 선택적 요소 및 설명 |
---|---|
공개 부울 | 모든 Realm 클래스를 모듈에 수동으로 추가하는 대신 이 부울을 true로 설정하여 이 프로젝트에 모든 Realm 클래스를 자동으로 포함합니다. |
이 모듈의 모든 클래스에 적용되는 명명 정책입니다. | |
public 클래스 | 이 모듈의 일부여야 하는 RealmObject를 확장하는 클래스를 지정합니다. |
이 모듈의 모든 클래스 부분에 있는 모든 필드 이름에 적용되는 명명 정책입니다. | |
공개 부울 | 이 항목을 true로 설정하면 이 모듈이 라이브러리 모듈로 표시됩니다. |
요소 세부 정보
allClasses |
---|
모든 Realm 클래스를 모듈에 수동으로 추가하는 대신 이 부울을 true로 설정하여 이 프로젝트에 모든 Realm 클래스를 자동으로 포함합니다. 자체 모듈을 사용하여 노출해야 하는 다른 라이브러리의 클래스는 여기에 포함되지 않습니다. 기본값입니다:
|
classNamingPolicy |
---|
이 모듈의 모든 클래스에 적용되는 명명 정책입니다. 기본값 정책은 RealmNamingPolicy.NO_POLICY 입니다. 클래스의 모든 필드에 대한 명명 정책을 정의하려면 fieldNamingPolicy() 를 사용합니다. RealmClass 주석을 사용하여 각 클래스의 모듈에 지정된 명명 정책을 재정의할 수 있습니다. 클래스가 여러 모듈에 속한 경우 두 모듈에 동일한 명명 정책을 적용해야 하며, 그렇지 않으면 오류가 발생합니다. 기본값입니다:
|
클래스 |
---|
이 모듈의 일부여야 하는 RealmObject를 확장하는 클래스를 지정합니다. 이 프로젝트의 클래스만 포함할 수 있습니다. 다른 라이브러리의 클래스는 자체 모듈을 사용하여 노출해야 합니다. 기본값입니다:
|
fieldNamingPolicy |
---|
이 모듈의 모든 클래스 부분에 있는 모든 필드 이름에 적용되는 명명 정책입니다. 기본값 정책은 RealmNamingPolicy.NO_POLICY 입니다. 클래스 이름에 대한 명명 정책을 정의하려면 classNamingPolicy() 를 사용합니다. RealmClass.fieldNamingPolicy() 또는 RealmField.name( )을 사용하여 이 이름 지정 정책을 재정의할 수 있습니다. 기본값입니다:
|
라이브러리 |
---|
이 항목을 true로 설정하면 이 모듈이 라이브러리 모듈로 표시됩니다. 이렇게 하면 Realm이 모든 클래스를 포함하는 기본값입니다:
|