주석 유형 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을 사용하는 모든 라이브러리는 명시적으로 모듈을 사용해야 하며 존재하는 기본 모듈에 의존할 수 없습니다. 동일한 프로젝트에서 라이브러리 모듈과 일반 모듈을 만드는 것은 허용되지 않으며 주석 프로세서에서 예외가 발생합니다.
        기본값입니다:
        거짓
      • allClasses

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

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

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

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

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

        다음도 참조하세요.
        for more information about what setting this policy means.
        기본값입니다:
        io.realm.annotations.RealmNamingPolicy.NO_POLICY