주석 유형 RealmModule
-
@Retention(RUNTIME) @Target(TYPE) @Inherited public @interface RealmModule
기본적으로 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()
을 사용하여 스키마에 라이브러리 프로젝트 클래스를 추가할 수 있습니다.- 다음도 참조하세요.
- 모듈을 사용하는 프로젝트 예시
-
-
선택적 요소 요약
선택적 요소 수정자 및 유형 선택적 요소 설명 boolean
allClasses
모든 Realm 클래스를 모듈에 수동으로 추가하는 대신 이 부울을 true로 설정하여 이 프로젝트에 모든 Realm 클래스를 자동으로 포함합니다.Class<?>[]
classes
이 모듈의 일부여야 하는 RealmObject를 확장하는 클래스를 지정합니다.RealmNamingPolicy
classNamingPolicy
이 모듈의 모든 클래스에 적용되는 명명 정책입니다.RealmNamingPolicy
fieldNamingPolicy
이 모듈의 모든 클래스 부분에 있는 모든 필드 이름에 적용되는 명명 정책입니다.boolean
library
이 항목을 true로 설정하면 이 모듈이 라이브러리 모듈로 표시됩니다.
-
-
-
요소 세부 정보
-
라이브러리
부울 라이브러리
이 항목을 true로 설정하면 이 모듈이 라이브러리 모듈로 표시됩니다. 이렇게 하면 Realm이 모든 클래스를 포함하는DefaultRealmModule
을(를) 생성하지 못합니다. 이는 라이브러리에 필요하므로 앱 코드에서 실행되는 Realm을 방해하지 않지만 Realm을 사용하는 모든 라이브러리는 명시적으로 모듈을 사용해야 하며 존재하는 기본 모듈에 의존할 수 없습니다. 동일한 프로젝트에서 라이브러리 모듈과 일반 모듈을 만드는 것은 허용되지 않으며 주석 프로세서에서 예외가 발생합니다.- 기본값입니다:
- 거짓
-
-
-
클래스
클래스<?>[] 클래스
이 모듈의 일부여야 하는 RealmObject를 확장하는 클래스를 지정합니다. 이 프로젝트의 클래스만 포함할 수 있습니다. 다른 라이브러리의 클래스는 자체 모듈을 사용하여 노출해야 합니다.allClasses = true
과classes()
을 모두 설정하면 주석 프로세서에서 예외가 발생합니다.- 기본값입니다:
- {}
-
-
-
classNamingPolicy
RealmNamingPolicy classNamingPolicy
이 모듈의 모든 클래스에 적용되는 명명 정책입니다. 기본 정책은RealmNamingPolicy.NO_POLICY
입니다. 클래스의 모든 필드에 대한 명명 정책을 정의하려면fieldNamingPolicy()
을(를) 사용합니다.RealmClass
주석을 사용하여 각 클래스의 모듈에 지정된 명명 정책을 재정의할 수 있습니다.클래스가 여러 모듈에 속한 경우 두 모듈에 동일한 명명 정책을 적용해야 하며, 그렇지 않으면 오류가 발생합니다.
- 기본값입니다:
- io.realm.annotations.RealmNamingPolicy.NO_POLICY
-
-
-
fieldNamingPolicy
RealmNamingPolicy 필드 NamingPolicy
이 모듈의 모든 클래스 부분에 있는 모든 필드 이름에 적용되는 명명 정책입니다. 기본 정책은RealmNamingPolicy.NO_POLICY
입니다. 클래스 이름에 대한 명명 정책을 정의하려면classNamingPolicy()
을(를) 사용합니다.RealmClass.fieldNamingPolicy()
또는RealmField.name()
을 사용하여 이 명명 정책을 재정의할 수 있습니다.- 기본값입니다:
- io.realm.annotations.RealmNamingPolicy.NO_POLICY
-
-