Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Realm 객체 모델 정의 - Java SDK

이 페이지의 내용

  • Realm 객체 정의
  • 확장 RealmObject
  • 구현 RealmModel
  • 목록
  • 내장된 객체 필드 정의
  • 주석
  • 기본 키
  • 필수 필드
  • 선택적 필드
  • 기본 필드 값
  • 필드 인덱싱
  • 필드 무시
  • 필드 이름 바꾸기
  • 클래스 이름 바꾸기
  • Realm 스키마에서 클래스 생략

애플리케이션 에서 Realm 객체 를 정의하려면 RealmObject 의 하위 클래스를 만들거나 RealmModel을 구현 합니다.

중요

  • 모든 Realm 객체는 빈 생성자를 제공해야 합니다.

  • 모든 Realm 객체는 Java의 public 가시성 수정자나 Kotlin의 open 가시성 수정자를 사용해야 합니다.

참고

클래스 이름은 최대 57자의 UTF-8 문자로 제한됩니다.

다음 코드 블록은 Frog를 설명하는 Realm 객체를 보여줍니다. 이 Frog 클래스는 RealmObject 클래스를 확장(extends)하므로 Realm에 저장할 수 있습니다.

import io.realm.RealmObject;
// To add an object to your Realm Schema, extend RealmObject
public class Frog extends RealmObject {
private String name;
private int age;
private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}
import io.realm.RealmObject
// providing default values for each constructor parameter
// fulfills the need for an empty constructor
open class Frog(
var name: String? = null,
var age: Int = 0,
var species: String? = null,
var owner: String? = null
) : RealmObject() // To add an object to your Realm Schema, extend RealmObject

다음 코드 블록은 Frog를 설명하는 Realm 객체를 보여줍니다. 이 Frog 클래스는 RealmModel 클래스를 구현(implements)하고 @RealmClass 주석을 사용하기 때문에 Realm에 저장할 수 있습니다.

import io.realm.RealmModel;
import io.realm.annotations.RealmClass;
@RealmClass
public class Frog implements RealmModel {
private String name;
private int age;
private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog() {} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}

중요

모든 Realm 객체는 public 가시성 수정자를 사용해야 합니다.

import io.realm.RealmModel
import io.realm.annotations.RealmClass
@RealmClass
open class Frog : RealmModel {
var name: String? = null
var age = 0
var species: String? = null
var owner: String? = null
constructor(name: String?, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

중요

모든 Realm 객체는 open 가시성 수정자를 사용해야 합니다.

RealmObject 메서드 사용

RealmObject 클래스를 확장하여 Realm 객체를 만들면 Realm 객체의 인스턴스에서 RealmObject 클래스 메서드에 동적으로 액세스할 수 있습니다. RealmModel을 구현해서 만든 Realm 객체는 RealmObject 클래스를 통해 동일한 메서드에 정적으로 액세스할 수 있습니다.

// With RealmObject
frogRealmObject.isValid();
frogRealmObject.addChangeListener(listener);
// With RealmModel
RealmObject.isValid(frogRealmModel);
RealmObject.addChangeListener(frogRealmModel, listener);
// With RealmObject
frogRealmObject?.isValid
frogRealmObject?.addChangeListener(listener)
// With RealmModel
RealmObject.isValid(frogRealmModel)
RealmObject.addChangeListener(frogRealmModel, listener)

Realm 객체에는 영역 객체가 아닌 데이터 유형의 목록이 포함될 수 있습니다:

Realm 객체 목록과 달리 이러한 목록에는 null 값이 포함될 수 있습니다. null 값을 허용하지 않아야 하는 경우 @Required 주석을 사용하세요.

import io.realm.RealmList;
import io.realm.RealmObject;
public class Frog extends RealmObject {
private String name;
private int age;
private String species;
private String owner;
private RealmList<String> favoriteColors;
public Frog(String name, int age, String species, String owner, RealmList<String> favoriteColors) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
this.favoriteColors = favoriteColors;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
public RealmList<String> getFavoriteColors() { return favoriteColors; }
public void setFavoriteColors(RealmList<String> favoriteColors) { this.favoriteColors = favoriteColors; }
}
import io.realm.RealmList
import io.realm.RealmObject
open class Frog : RealmObject {
var name: String? = null
var age = 0
var species: String? = null
var owner: String? = null
var favoriteColors : RealmList<String>? = null
constructor(
name: String?,
age: Int,
species: String?,
owner: String?,
favoriteColors: RealmList<String>?
) {
this.name = name
this.age = age
this.species = species
this.owner = owner
this.favoriteColors = favoriteColors
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

다음도 참조하세요.

Realm은 다른 객체 내에 객체를 중첩하는 기능을 제공합니다. 여기에는 다음과 같은 몇 가지 장점이 있습니다.

객체 를 포함하려면 다른 클래스 내에 중첩하려는 클래스에서 @RealmClass 주석의 embedded 속성 을 true 로 설정하다 합니다.

import io.realm.RealmObject;
import io.realm.annotations.RealmClass;
@RealmClass(embedded=true)
public class Fly extends RealmObject {
private String name;
public Fly(String name) {
this.name = name;
}
public Fly() {} // RealmObject subclasses must provide an empty constructor
}
import io.realm.RealmObject
import io.realm.annotations.RealmClass
@RealmClass(embedded = true)
open class Fly : RealmObject {
private var name: String? = null
constructor(name: String?) {
this.name = name
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

그런 다음 다른 클래스에서 해당 클래스를 참조할 때마다 Realm은 다음 예시에서와 같이 참조된 클래스를 둘러싸는 클래스 안에 포함시킵니다:

import io.realm.RealmObject;
public class Frog extends RealmObject {
private String name;
private int age;
private String species;
private String owner;
private Fly lastMeal;
public Frog(String name, int age, String species, String owner, Fly lastMeal) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
this.lastMeal = lastMeal;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
public Fly getLastMeal() { return lastMeal; }
public void setLastMeal(Fly lastMeal) { this.lastMeal = lastMeal; }
}
import io.realm.RealmObject
open class Frog : RealmObject {
var name: String? = null
var age = 0
var species: String? = null
var owner: String? = null
var lastMeal: Fly? = null
constructor(
name: String?,
age: Int,
species: String?,
owner: String?,
lastMeal: Fly?
) {
this.name = name
this.age = age
this.species = species
this.owner = owner
this.lastMeal = lastMeal
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

다음도 참조하세요.

주석을 사용하여 Realm 객체 모델을 사용자 지정합니다.

버전 10.6.0의 새로운 기능: Realm은 기본 키 필드를 자동으로 인덱싱합니다. 이전에는 Realm에서 String의 기본 키만을 자동으로 인덱싱했습니다.

Realm은 @PrimaryKey 주석으로 표시된 필드를 해당 객체 스키마의 기본 키로 취급합니다. 기본 키에는 다음과 같은 제한 사항이 적용됩니다.

  • 객체 모델당 기본 키는 하나만 정의할 수 있습니다.

  • 프라이머리 키 값은 영역에 있는 객체의 모든 인스턴스에서 고유해야 합니다. 중복된 프라이머리 키 값을 삽입하려고 하면 RealmPrimaryKeyConstraintException이 발생합니다.

  • 프라이머리 키 값은 변경되지 않습니다. 객체의 프라이머리 키 값을 변경하려면 원본 객체를 삭제하고 프라이머리 키 값이 다른 새 객체를 삽입해야 합니다.

  • 내장된 객체는 프라이머리 키를 정의할 수 없습니다.

다음 유형 중 하나를 사용하여 기본 키를 만들 수 있습니다:

  • String

  • UUID

  • ObjectId

  • Integer or int

  • Long or long

  • Short or short

  • Byte or byte[]

기본이 아닌 유형은 기본 키 값으로 null 값을 포함할 수 있지만, 각 기본 키 값은 고유해야 하므로 특정 유형의 객체 하나에 대해서만 해당 값을 포함할 수 있습니다. 기존 기본 키가 있는 객체를 영역에 삽입하려고 하면 RealmPrimaryKeyConstraintException이 발생합니다.

Realm은 기본 키 필드를 자동으로 인덱싱하므로 기본 키를 기반으로 객체를 효율적으로 읽고 수정할 수 있습니다.

영역 에 해당 유형의 객체 를 추가한 후에는 객체 유형에 대한 기본 키 필드 를 변경할 수 없습니다. 동기화를 사용하는 경우 백엔드 스키마에서 기본 키 를 정의한 후에는 객체 의 기본 키 필드 를 변경할 수 없습니다.

내장된 객체는 기본 키를 포함할 수 없습니다.

선택적으로 객체 유형에 대한 기본 키를 객체 스키마의 일부로 @PrimaryKey 주석을 사용하여 정의할 수 있습니다:

import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;
public class Frog extends RealmObject {
@PrimaryKey private String name;
private int age;
private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
open class Frog : RealmObject {
@PrimaryKey var name : String? = null
var age = 0
var species: String? = null
var owner: String? = null
constructor(name: String?, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}
import io.realm.RealmObject;
import io.realm.annotations.Required;
public class Frog extends RealmObject {
@Required private String name;
private int age;
private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}
import io.realm.RealmObject
import io.realm.annotations.Required
open class Frog : RealmObject {
@Required var name: String? = null
var age = 0
var species: String? = null
var owner: String? = null
constructor(name: String?, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

Java 객체 유형 및 코틀린 (Kotlin) null 허용 유형( ? 으로 끝남)으로 표시된 필드는 기본값 null을 허용합니다. 다른 모든 유형(primitive, null을 허용하지 않는 코틀린 (Kotlin) 객체 유형)은 기본값 필수입니다. null 허용 필드 를 @Required 주석으로 표시하여 해당 필드 가 null 값을 보유하지 않도록 할 수 있습니다. RealmLists 는 절대 null을 허용하지 않지만 @Required 주석을 사용하면 기본 유형에서 null을 허용하더라도 목록의 객체가 null 값을 보유하지 못하도록 할 수 있습니다. RealmObject 하위 유형의 RealmList 를 필수 항목으로 표시할 수 없습니다.

다음 유형 중 하나를 필수 항목으로 설정할 수 있습니다:

  • String

  • UUID

  • ObjectId

  • Integer

  • Long

  • Short

  • Byte or byte[]

  • Boolean

  • Float

  • Double

  • Date

  • RealmList

intRealmList 유형과 같은 초기(Primitive) 유형은 암시적으로 필수 항목입니다. RealmObject 유형의 필드는 항상 null을 허용하며, 필수 항목으로 설정할 수 없습니다.

중요

Kotlin 유형 및 null 허용 여부

코틀린 (Kotlin) 에서는 유형에 ? 접미사를 명시적으로 추가하지 않는 한 기본값 유형에 null을 지정할 수 없습니다. null 허용 유형 에만 주석을 달 수 있습니다. null을 허용하지 않는 유형에 @Required 주석을 사용하면 컴파일에 실패합니다.

@Required 주석으로 달리 지정하지 않는 한 Realm에서 null 허용 필드는 기본적으로 선택 사항입니다. 다음 유형은 null을 허용합니다.

  • String

  • Date

  • UUID

  • ObjectId

  • Integer

  • Long

  • Short

  • Byte or byte[]

  • Boolean

  • Float

  • Double

intlong 과 같은 기본 유형은 기본값 으로 null을 허용하지 않으며 null 값으로 설정하다 수 없으므로 null을 허용하도록 설정할 수 없습니다.

코틀린 (Kotlin) 에서 필드 는 코틀린 (Kotlin)? 연산자 단, 다음 유형은 제외됩니다.

  • String

  • Date

  • UUID

  • ObjectId

  • Decimal128

  • RealmAny

Int?와(과) 같이 Kotlin ? 연산자로 끝나는 모든 유형을 요구할 수 있습니다.

RealmList 유형은 기본적으로 null을 허용하지 않으며 null을 허용하도록 설정할 수 없습니다.

필드에 기본값을 지정하려면 기본 제공 언어 기능을 사용하여 기본값을 할당합니다.

클래스 생성자를 사용하여 기본값을 할당합니다.

import io.realm.RealmObject;
public class Frog extends RealmObject {
private String name = "Kitty";
private int age;
private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}

필드 선언에서 기본값을 지정합니다.

import io.realm.RealmObject
open class Frog : RealmObject {
var name = "Kitty"
var age = 0
var species: String? = null
var owner: String? = null
constructor(name: String, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

참고

기본값 및 null 허용 여부

기본값은 새로 만든 객체가 null 값을 포함할 수 없도록 하지만(기본값 null 을 지정하지 않는 한), 필드의 null 허용 여부에는 영향을 주지 않습니다. 필드에 null을 허용하지 않도록 설정하려면 필수 필드를 참조하세요.

인덱스는 Realm에서 쿼리를 효율적으로 실행할 수 있도록 지원합니다. 인덱스가 없는 경우, Realm은 컬렉션 스캔, 즉 컬렉션의 모든 문서를 스캔하여 쿼리와 일치하는 문서를 선택해야 합니다. 쿼리에 대한 적절한 인덱스가 존재하는 경우 Realm은 인덱스를 사용하여 검사해야 하는 문서 수를 제한할 수 있습니다.

인덱스는 영역 데이터의 작은 부분을 쉽게 탐색할 수 있는 형식으로 저장하는 특수 데이터 구조입니다. 인덱스는 필드 값에 따라 정렬된 특정 필드의 값을 저장합니다. 인덱스 항목의 순서는 효율적인 동등성 매치 및 범위 기반 쿼리 작업을 지원합니다.

인덱스를 추가하면 쓰기 시간이 약간 느려지고 스토리지 및 메모리 오버헤드가 늘어나지만 일부 쿼리의 속도가 빨라질 수 있습니다. 인덱스는 영역 파일의 공간을 차지하므로 속성에 인덱스를 추가하면 영역 파일이 사용하는 디스크 공간이 늘어납니다. 각 인덱스 항목은 최소 12바이트입니다.

다음 유형의 필드를 인덱싱할 수 있습니다:

  • String

  • UUID

  • ObjectId

  • Integer or int

  • Long or long

  • Short or short

  • Byte or byte[]

  • Boolean or bool

  • Date

  • RealmAny

Realm 은 @Index 주석이 달린 필드에 대한 인덱스를 생성합니다.

필드를 인덱싱하려면 @Index 주석을 사용합니다:

import io.realm.RealmObject;
import io.realm.annotations.Index;
public class Frog extends RealmObject {
private String name;
private int age;
@Index private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}
import io.realm.RealmObject
import io.realm.annotations.Index
open class Frog : RealmObject {
var name: String? = null
var age = 0
@Index var species : String? = null
var owner: String? = null
constructor(name: String?, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

모델의 필드를 영역에 저장하지 않으려는 경우 필드를 무시할 수 있습니다.

@Ignore 주석을 사용하여 Realm 객체 모델에서 필드 를 무시합니다.

import io.realm.RealmObject;
import io.realm.annotations.Ignore;
public class Frog extends RealmObject {
private String name;
private int age;
private String species;
// can you ever really own a frog persistently?
@Ignore private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}
import io.realm.RealmObject
import io.realm.annotations.Ignore
open class Frog : RealmObject {
var name: String? = null
var age = 0
var species: String? = null
// can you ever really own a frog persistently?
@Ignore var owner : String? = null
constructor(name: String?, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

참고

SDK는 정적 및 일시적 필드를 무시합니다.

static 또는 transient로 표시된 필드는 항상 무시되며 @Ignore 주석이 필요하지 않습니다.

기본적으로 Realm은 모델 클래스에 정의된 이름을 사용하여 내부적으로 필드를 나타냅니다. 다음과 같은 이유로 이 동작을 변경하고 싶을 수도 있습니다:

  • 이름 지정 규칙이 서로 다른 플랫폼에서 더 쉽게 작업하고자 하는 경우.

  • 마이그레이션을 강제하지 않고 Kotlin에서 필드 이름을 변경하고자 하는 경우.

모델 클래스에 사용된 이름과 다른 내부 이름을 선택하면 다음과 같은 의미가 있습니다.

  • 마이그레이션은 클래스 및 필드를 만들 때 내부 이름을 사용해야 합니다.

  • 보고된 스키마 오류는 내부 이름을 사용합니다.

필드 이름을 바꾸려면 @RealmField 주석을 사용합니다:

import io.realm.RealmObject;
import io.realm.annotations.RealmField;
public class Frog extends RealmObject {
private String name;
private int age;
@RealmField("latinName") private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}
import io.realm.RealmObject
import io.realm.annotations.RealmField
open class Frog : RealmObject {
var name: String? = null
var age = 0
@RealmField("latinName") var species: String? = null
var owner: String? = null
constructor(name: String?, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

또는 모듈이나 클래스 수준에서 이름 지정 정책을 할당하여 Realm이 필드 이름을 해석하는 방식을 변경할 수도 있습니다.

모듈 수준 에서 이름 지정 정책 을 정의할 수 있으며, 이는 모듈에 포함된 모든 클래스에 영향을 미칩니다.

import io.realm.annotations.RealmModule;
import io.realm.annotations.RealmNamingPolicy;
@RealmModule(
allClasses = true,
classNamingPolicy = RealmNamingPolicy.LOWER_CASE_WITH_UNDERSCORES,
fieldNamingPolicy = RealmNamingPolicy.LOWER_CASE_WITH_UNDERSCORES
)
public class MyModule {
}
import io.realm.annotations.RealmModule
import io.realm.annotations.RealmNamingPolicy
@RealmModule(
allClasses = true,
classNamingPolicy = RealmNamingPolicy.LOWER_CASE_WITH_UNDERSCORES,
fieldNamingPolicy = RealmNamingPolicy.LOWER_CASE_WITH_UNDERSCORES
)
open class MyModule

클래스 수준에서 이름 지정 정책을 정의하여 모듈 수준 설정을 재정의할 수도 있습니다:

import io.realm.RealmObject;
import io.realm.annotations.RealmClass;
import io.realm.annotations.RealmNamingPolicy;
@RealmClass(fieldNamingPolicy = RealmNamingPolicy.PASCAL_CASE)
public class Frog extends RealmObject {
private String name;
private int age;
private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}
import io.realm.RealmObject
import io.realm.annotations.RealmClass
import io.realm.annotations.RealmNamingPolicy
@RealmClass(fieldNamingPolicy = RealmNamingPolicy.PASCAL_CASE)
open class Frog : RealmObject {
var name: String? = null
var age = 0
var species: String? = null
var owner: String? = null
constructor(name: String?, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

기본적으로 Realm은 모델 클래스에 정의된 이름을 사용하여 내부적으로 클래스를 나타냅니다. 다음과 같은 이유로 이 동작을 변경하고 싶을 수도 있습니다:

  • 서로 다른 패키지에서 동일한 단순한 이름을 가진 여러 모델 클래스를 지원하고자 하는 경우.

  • 이름 지정 규칙이 서로 다른 플랫폼에서 더 쉽게 작업하고자 하는 경우.

  • 클래스 이름이 Realm에서 지정한 57자 제한보다 긴 경우.

  • 마이그레이션을 강제하지 않고 Kotlin에서 클래스 이름을 변경하고자 하는 경우.

클래스의 이름을 바꾸려면 @RealmClass 주석을 사용합니다:

import io.realm.RealmObject;
import io.realm.annotations.RealmClass;
@RealmClass(name = "ShortBodiedTaillessAmphibian")
public class Frog extends RealmObject {
private String name;
private int age;
private String species;
private String owner;
public Frog(String name, int age, String species, String owner) {
this.name = name;
this.age = age;
this.species = species;
this.owner = owner;
}
public Frog(){} // RealmObject subclasses must provide an empty constructor
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getSpecies() { return species; }
public void setSpecies(String species) { this.species = species; }
public String getOwner() { return owner; }
public void setOwner(String owner) { this.owner = owner; }
}
import io.realm.RealmObject
import io.realm.annotations.RealmClass
@RealmClass(name = "Short_Bodied_Tailless_Amphibian")
open class Frog : RealmObject {
var name: String? = null
var age = 0
var species: String? = null
var owner: String? = null
constructor(name: String?, age: Int, species: String?, owner: String?) {
this.name = name
this.age = age
this.species = species
this.owner = owner
}
constructor() {} // RealmObject subclasses must provide an empty constructor
}

기본적으로 애플리케이션의 Realm 스키마에는 RealmObject를 확장하는 모든 클래스가 포함됩니다. Realm 스키마에 RealmObject를 확장하는 클래스의 하위 집합만 포함하려는 경우, 해당 클래스의 하위 집합을 모듈에 포함하고 해당 모듈을 사용하여 영역을 열 수 있습니다.

import io.realm.annotations.RealmModule;
@RealmModule(classes = { Frog.class, Fly.class })
public class MyModule {
}
import io.realm.annotations.RealmModule
@RealmModule(classes = [Frog::class, Fly::class])
open class MyModule

돌아가기

모델 데이터