15
0 Realm 모델 & 관계 Made by 이종찬

02 realm 모델 & 관계

Embed Size (px)

Citation preview

Page 1: 02   realm 모델 & 관계

0

Realm모델 & 관계

Made by 이종찬

Page 2: 02   realm 모델 & 관계

1

01 모델(Model)지원되는 필드 타입들을 알아보자.

박스형Boolean, Byte, Short, Integer, Long, Float, Double-> 박스형과 RealmObject형 필드만 null 값을 넣을 수 있다.

서브클래스 및 리스트형RealmObject의 서브클래스, RealmList <? Extends RealmObject>

기본형boolean, short, int, long, float, double, String, Date, byte[]-> short, int, long 은 Realm 내에서 모두 long으로 대응된다.

1

2

3

Field

Page 3: 02   realm 모델 & 관계

2

01 모델(Model)지원되는 필드 타입들을 알아보자.

Field

public class Dog extends RealmObject {public String name;public int age;

}

public RealmList<Dog> dogs;

Page 4: 02   realm 모델 & 관계

3

01 모델(Model)Realm에서 사용되는 어노테이션(annotation)을 알아보자.

Annotation

1 @Required

1 null 값을 허용하지 않기 위해 사용한다.2 박스형만 지정할 수 있다.3 기본형과 RealmList는 암묵적으로 Required로 취급한다.4 RealmObject는 항상 널이 가능

2 @Ignore

1 필드가 디스크에 저장되지 않도록 하는 기능을 한다.2 사용자의 입력이 모델의 필드보다 많을 때, 쓰지 않을 데이터 필드를 다룰 때 사용한다.

Page 5: 02   realm 모델 & 관계

4

01 모델(Model)Realm에서 사용되는 어노테이션(annotation)을 알아보자.

Annotation

3 @Index

1 해당 필드에 검색 색인을 추가한다.2 질의 처리를 빠르게 할 수 있다.3 삽입 처리가 느리고 데이터의 파일을 크게 만든다.4 읽기에 최적화를 하는 경우에만 추가하는 것을 추천한다.5 String, byte, short, int, long, Boolean, Date에 가능하다.

Page 6: 02   realm 모델 & 관계

5

01 모델(Model)Realm에서 사용되는 어노테이션(annotation)을 알아보자.

Annotation

4 @PrimaryKey

1 문자열(String)이나 정수(byte, short, int, long)이나 이에대응하는 박스형(Byte, Short, Integer, Long)에 가능하다.

2 여러 필드를 PrimaryKey로 설정하는 것은 불가능하다.3 @PrimaryKey는 암묵적으로 @Index를 설정한다.4 PrimaryKey를 사용하면 Querying의 속도는 향상될 수 있다.5 객체를 생성하고 수정할 때 속도하락이 있을 수 있다.6 String, byte, short, int, long, Boolean, Date 에 가능하다.

Page 7: 02   realm 모델 & 관계

6

01 모델(Model)RealmObject의 사용법을 알아보자.

Object

1 일반적으로 사용하기public class Dog extends RealmObject {

private String name;

public void setName(String name) { this.name = name; }public String getName() { return name; }

}

realm.executeTransaction(new Realm.Transaction() {@Overridepublic void execute(Realm realm) {

Dog dog = realm.createObject(Dog.class);dog.setName("Fido");

}});

Page 8: 02   realm 모델 & 관계

7

01 모델(Model)RealmObject의 사용법을 알아보자.

Object

2 POJO(Plain Old Java Object)처럼 사용하기

public class Dog extends RealmObject {public String name;

}

realm.executeTransaction(new Realm.Transaction() {@Overridepublic void execute(Realm realm) {

Dog dog = realm.createObject(Dog.class);dog.name = “Fido”;

}});

요구사항에 맞춰서 getter와 setter에 로직을 추가할 수도 있다.

Page 9: 02   realm 모델 & 관계

8

POJO(Plain Old Java Object)란?

POJO : 프레임워크 등에 종속된 ‘무거운’ 객체를만들게 된 것에(EJB에) 반발해서 사용하게 된 용어

POJO의 필수요소1. light-weight(possibly) : 가볍게2. flexible : 유연성3. simple : 간단 명료4. supported by separate optional components

such as hibernate or spring

POJO가 아닌 대표적인 객체public HelloSevlet extends HttpServlet{...}-> 자바 서블릿 코드를 작성할 때는 반드시 HttpServlet을 상속받아야한다.-> 서플릿 프로그래밍을 한다는 이유로 상속이라는 핵심 기능을 빼앗긴 것

-> 개발자가 직접 상속을 할 수 있는 기회가 없어진 것이다.-> HttpServlet 을 상속 받았기 때문에 이 코드를 이해해야 하며어떤 기능이 있는지 어떻게 재사용해야 할지 판단하기도 어렵다.

Page 10: 02   realm 모델 & 관계

9

01 모델(Model)현재 Realm에 어떠한 제약사항이 있는지 알아보자.

제약사항

RealmObject 외의 상속을 허용하지 않는다.기본 생성자는 재정의 하지 말아야 한다.-> 기본 생성자에서 Realm 인스턴스가 주어져 있다고 가정하는메소드를 호출하기 때문이다.

-> RealmModel 인터페이스를 추가하는 방식으로 해결 할 수도 있다.

final, transient, volatile 지원하지 않는다.Realm에 의해 관리되는 객체와 비관리 객체 간의불일치를 막기 위해서입니다.

1

2

Page 11: 02   realm 모델 & 관계

10

02 관계(Relationships)Realm에서 관계는 어떻게 정의하는지 알아보자.

1

다 대 일

다 대 일public class Book extends RealmObject {

private String title;// 다른 필드 및 getter, setter

}

public class Author extends RealmObject {private Book book;// 다른 필드 및 getter, setter

}

각 Author은 0혹은 1개의 Book을 갖는다.하지만 책에는 공동 저자 라는 것이 있다.즉, 여러 Author가 하나의 Book을 사용할 수 있다.이러한 관계가 다-대-일 이다.

author1

author2

author3

author4

book1

book2

Page 12: 02   realm 모델 & 관계

11

02 관계(Relationships)Realm에서 관계는 어떻게 정의하는지 알아보자.

2

다 대 다

다 대 다public class Book extends RealmObject {

private String title;// 다른 필드 및 getter, setter

}

public class Author extends RealmObject {private RealmList<Book> books;// 다른 필드 및 getter, setter

}

Author는 여러 권의 Book을 집필 했을 수 있다.이때 또한 공동 저자가 적용 될 수 있다.다-대-다 관계이다.RealmList를 이용하면 다-대-다 관계를 설정할 수 있다.

author1

author2

author3

author4

book1

book2

book3

Page 13: 02   realm 모델 & 관계

12

02 관계(Relationships)Realm에서 관계는 어떻게 정의하는지 알아보자.

2

다 대 다

다 대 다

RealmList는 자바의 List와 비슷한 행동을 한다.RealmList안에 객체를 추가하기 위해서는 RealmList.add()를 사용하면 된다.

realm.executeTransaction(new Realm.Transaction() {@Overridepublic void execute(Realm realm) {

Author author = realm. createObject(Author.class);

Book book = realm.createObject(Book.class);Book.settitle(“realm”);

author.books.add(book);}

});

Page 14: 02   realm 모델 & 관계

13

RealmList의 사용

RealmList를 사용하여 재귀적인 관계도 설정 가능하다.

public class Person extends RealmObject {private RealmList<Person> friends;// 다른 필드 및 getter, setter

}

RealmList 필드에 null 값을 설정하면 리스트가 초기화된다.이것은 null로 바꾸는 것이 아닌 길이가 0인 리스트로 만드는 것이다.때문에 RealmList의 getter는 null을 절대 반환하지 않는다.길이가 0인 리스트를 반환한다.

Page 15: 02   realm 모델 & 관계

14

감사합니다.

Made by 이종찬

정보 출처 : realm.ioppt템플릿 : 홍양홍삼님 블로그