문서 메뉴

문서 홈애플리케이션 개발Atlas Device SDK

주석 유형 RealmModule

이 페이지의 내용

  • io.realm.annotations
  • RealmModule과 라이브러리
  • 선택적 요소 요약
  • 요소 세부 정보

구현된 인터페이스:

기본적으로 Realm은 RealmObject를 확장하는 모든 클래스를 프로젝트에서 저장할 수 있습니다. 하지만, Realm이 클래스의 하위 집합만 포함하도록 제한하거나 라이브러리 프로젝트와 앱 프로젝트 간에 클래스를 공유하려면 RealmModule을 사용해야 합니다. RealmModule은 다음과 결합할 수 있는 RealmObject를 확장하는 클래스의 collection입니다. 다른 RealmModule을 사용하여 Realm에 대한 스키마를 생성합니다. 이렇게 하면 해당 Realm의 버전 관리 및 마이그레이션을 더 쉽게 제어할 수 있습니다.

RealmModule은 라이브러리 모듈일 수도 있고 앱 모듈일 수도 있습니다. 구분은 library = true 를 설정합니다. library = true 설정은 일반적으로 라이브러리 작성자에게만 해당됩니다. 자세한 내용은 아래를 참조하세요.

현재는 하나의 파일에 여러 개의 RealmModule 선언을 가질 수 없습니다. 두 개 이상의 RealmModule이 있는 경우 각 모듈에 대해 별도의 Java 파일을 사용해야 합니다.

Realm의 기본 동작은 프로젝트에서 RealmObject를 확장하는 모든 클래스를 포함하는 DefaultRealmModule 이라는 RealmModule을 자동으로 생성하는 것입니다. 이 모듈은 Realm에서 자동으로 인식됩니다.

이 동작은 Realm을 사용하는 라이브러리 프로젝트와 앱 프로젝트를 결합할 때 문제가 발생합니다. 이는 라이브러리 프로젝트와 앱 프로젝트 모두에 대해 DefaultRealmModule 이(가) 생성되어 중복 클래스 정의 오류로 인해 프로젝트가 실패하기 때문입니다.

라이브러리 작성자는 library = true 가 설정된 명시적 모듈을 사용하여 이러한 충돌을 방지할 책임이 있습니다. 이렇게 하면 라이브러리 프로젝트에 대한 DefaultRealmModule 생성이 비활성화되고 라이브러리가 Realm을 사용하는 앱 프로젝트에 포함될 수 있습니다. 즉, 내부적으로 Realm을 사용하는 라이브러리 프로젝트는 RealmConfiguration.modules() 을 사용하여 특정 모듈을 지정해야 합니다.

앱 개발자는 암시적으로 DefaultRealmModule 을(를) 사용하므로 모듈을 지정할 필요가 없지만 이제 RealmConfiguration.addModule() 을 사용하여 스키마에 라이브러리 프로젝트 클래스를 추가할 수 있습니다.

다음도 참조하세요.

수정자 및 유형
선택적 요소 및 설명
공개 부울
모든 Realm 클래스를 모듈에 수동으로 추가하는 대신 이 부울을 true로 설정하여 이 프로젝트에 모든 Realm 클래스를 자동으로 포함합니다.
이 모듈의 모든 클래스에 적용되는 명명 정책입니다.
public 클래스
이 모듈의 일부여야 하는 RealmObject를 확장하는 클래스를 지정합니다.
이 모듈의 모든 클래스 부분에 있는 모든 필드 이름에 적용되는 명명 정책입니다.
공개 부울
이 항목을 true로 설정하면 이 모듈이 라이브러리 모듈로 표시됩니다.
allClasses

public boolean allClasses

모든 Realm 클래스를 모듈에 수동으로 추가하는 대신 이 부울을 true로 설정하여 이 프로젝트에 모든 Realm 클래스를 자동으로 포함합니다. 자체 모듈을 사용하여 노출해야 하는 다른 라이브러리의 클래스는 여기에 포함되지 않습니다. allClasses = trueclasses() 을 모두 설정하면 주석 프로세서에서 예외가 발생합니다.

기본값입니다: false

classNamingPolicy

public RealmNamingPolicy classNamingPolicy

이 모듈의 모든 클래스에 적용되는 명명 정책입니다. 기본 정책은 RealmNamingPolicy.NO_POLICY 입니다. 클래스의 모든 필드에 대한 명명 정책을 정의하려면 fieldNamingPolicy() 를 사용합니다.

RealmClass 주석을 사용하여 각 클래스의 모듈에 지정된 명명 정책을 재정의할 수 있습니다.

클래스가 여러 모듈에 속한 경우 두 모듈에 동일한 명명 정책을 적용해야 하며, 그렇지 않으면 오류가 발생합니다.

기본값입니다: io.realm.annotations.RealmNamingPolicy.NO_POLICY

수업

public Class classes

이 모듈의 일부여야 하는 RealmObject를 확장하는 클래스를 지정합니다. 이 프로젝트의 클래스만 포함할 수 있습니다. 다른 라이브러리의 클래스는 자체 모듈을 사용하여 노출해야 합니다. allClasses = trueclasses() 을 모두 설정하면 주석 프로세서에서 예외가 발생합니다.

기본값입니다: {}

fieldNamingPolicy

public RealmNamingPolicy fieldNamingPolicy

이 모듈의 모든 클래스 부분에 있는 모든 필드 이름에 적용되는 명명 정책입니다. 기본 정책은 RealmNamingPolicy.NO_POLICY 입니다. 클래스 이름에 대한 명명 정책을 정의하려면 classNamingPolicy() 를 사용합니다.

RealmClass.fieldNamingPolicy() 또는 RealmField.name( )을 사용하여 이 이름 지정 정책을 재정의할 수 있습니다.

기본값입니다: io.realm.annotations.RealmNamingPolicy.NO_POLICY

라이브러리

public boolean library

이 항목을 true로 설정하면 이 모듈이 라이브러리 모듈로 표시됩니다. 이렇게 하면 Realm이 모든 클래스를 포함하는 DefaultRealmModule 을(를) 생성하지 못합니다. 이는 라이브러리에 필요하므로 앱 코드에서 실행되는 Realm을 방해하지 않지만 Realm을 사용하는 모든 라이브러리는 명시적으로 모듈을 사용해야 하며 존재하는 기본 모듈에 의존할 수 없습니다. 동일한 프로젝트에서 라이브러리 모듈과 일반 모듈을 만드는 것은 허용되지 않으며 주석 프로세서에서 예외가 발생합니다.

기본값입니다: false

← 주석 유형 RealmField