Docs Menu
Docs Home
/ /
데이터 유형

컬렉션 - Java SDK

Realm 컬렉션은 한 가지 유형 의 인스턴스를 0개 이상 포함하는 객체입니다. Realm collection은 동질적입니다. 즉, collection의 모든 객체가 동일한 유형입니다.

영역의 쿼리 엔진을 사용하여 모든 컬렉션을 필터링하고 정렬할 수 있습니다. 컬렉션은 라이브 상태이므로 항상 현재 스레드에서 영역 인스턴스의 현재 상태를 반영합니다. 컬렉션 알림을 구독하여 컬렉션의 변경 사항을 수신할 수도 있습니다.

Realm에는 목록결과 라는 두 가지 종류의 collection 있습니다.

Realm 객체에는 Realm 객체가 아닌 데이터 유형 목록이 포함될 수 있습니다. 이러한 컬렉션을 RealmList<T> 유형으로 모델링할 수 있으며, 여기서 T 는 다음 유형일 수 있습니다.

  • String

  • Integer

  • UUID

  • ObjectId

  • Boolean

  • Float

  • Double

  • Short

  • Long

  • Byte

  • byte[]

  • Date

목록 컬렉션 은 두 Realm 유형 간의 대다 관계를 나타냅니다. 목록은 변경 가능합니다: 쓰기 트랜잭션(write transaction) 내에서 목록의 요소를 추가하고 제거할 수 있습니다. 목록은 쿼리와 연결되지 않습니다.

결과 collection 은 느리게 평가된 쿼리 작업의 결과를 나타냅니다. 결과는 변경할 수 없으므로 결과 collection에서 요소를 추가하거나 제거할 수 없습니다. 결과에는 해당 내용을 결정하는 관련 쿼리가 있습니다.

RealmResults 클래스는 추상 목록 에서 상속되며 비슷한 방식으로 작동합니다. 예시RealmResults 를 들어 는 정렬되며 인덱스 통해 개별 객체 액세스 할 수 있습니다. 쿼리 에 일치하는 RealmResults 항목이 없는 경우 반환되는 객체 0 는 null 객체 참조가 아닌 길이가 인 목록이 됩니다.

쓰기 트랜잭션(write transaction)에서는 RealmResults 세트의 객체만 수정하거나 삭제할 수 있습니다.

Realm collection은 라이브이기 때문에 collection을 반복할 때 객체가 이동할 수 있습니다. 스냅샷 을 사용하여 collection을 안전하게 반복할 수 있습니다.

Realm은 데이터를 표준 UI 위젯에 바인딩하는 데 도움이 되는 어댑터를 제공합니다. 이러한 클래스는 내장 RealmResultsRealmList 클래스를 포함하여 OrderedRealmCollection 인터페이스를 구현하는 모든 클래스에서 작동합니다. 어댑터에 대한 자세한 내용은 collection 표시하기 문서를 참조하세요.

중요

어댑터에는 managed 객체가 필요합니다.

Realm 어댑터는 Realm의 인스턴스에 연결된 managed Realm 객체 인스턴스만 허용합니다. managed 객체를 표시하려면 리사이클러 보기의 경우 범용 Android RecyclerView.Adapter 를 사용하고 목록 보기의 경우 ArrayAdapter 를 사용합니다.

라이브 객체와 마찬가지로 Realm 컬렉션은 일반적으로 라이브 상태입니다.

  • 라이브 결과 컬렉션은 항상 관련 쿼리의 현재 결과를 반영합니다.

  • 라이브 목록은 항상 영역 인스턴스 관계의 현재 상태를 반영합니다.

collection이 라이브 상태가 아닌 세 가지 경우가 있습니다.

  • collection이 관리되지 않는 경우(예: 아직 영역에 추가되지 않았거나 영역에서 복사된 Realm 객체의 속성)

  • 컬렉션이 동결되었습니다.

  • collection은 스냅샷의 일부입니다.

컬렉션 알림과 결합된 라이브 컬렉션을 활성화하면 깔끔하고 반응성이 뛰어난 코드를 만들 수 있습니다. 예를 들어 뷰에 쿼리 결과가 표시된다고 가정해 보겠습니다. 뷰 클래스에 결과 컬렉션에 대한 참고를 유지할 수 있으며 결과 컬렉션을 새로 고치거나 최신 상태인지 확인할 필요 없이 필요에 따라 결과 컬렉션을 읽을 수 있습니다.

경고

인덱스가 변경될 수 있습니다.

결과는 자동으로 업데이트됩니다. collection에 있는 객체의 위치 인덱스나 collection에 있는 객체의 개수를 저장하는 경우, 저장된 인덱스 또는 개수 값은 사용하는 시점에 따라 이미 오래된 정보일 수 있습니다.

Realm은 결과 컬렉션의 요소에 접근하는 등 실제로 쿼리 결과를 요청할 때만 쿼리를 실행합니다. 이 지연 평가를 사용하면 대규모 데이터 세트와 복잡한 쿼리를 처리할 수 있는 우아하고 성능이 뛰어난 코드를 작성할 수 있습니다.

평가가 지연되므로 Realm의 쿼리 결과를 제한하기 위한 특별한 메커니즘이 필요하지 않습니다. 예를 들어 쿼리가 수천 개의 객체와 일치하지만 처음 10개만 로드하려는 경우 결과 컬렉션의 처음 10개 요소에만 액세스하면 됩니다.

지연 평가 덕분에 일반적인 페이지 매김 작업이 아주 간단해집니다. 예를 들어 영역에 있는 수천 개의 객체와 일치하는 쿼리와 연결된 결과 컬렉션이 있다고 가정해 보겠습니다. 페이지당 100개의 객체를 표시합니다. 원하는 페이지로 이동하려면 대상 페이지에 해당하는 인덱스부터 결과 컬렉션의 요소에 액세스하기만 하면 됩니다.

Collection이 필요한 경우 다음과 같은 경험 규칙을 사용하여 목록 또는 결과 collection이 적절한지 여부를 결정할 수 있습니다.

이러한 다양한 사용 사례를 이해하려면 객체를 직접 추가하거나 제거할 수 있어야 하는지 여부를 고려하세요. 목록을 사용하면 관계를 제어할 수 있으므로 객체를 직접 추가하고 제거할 수 있습니다. 결과 collection에서는 객체의 내용이 쿼리에 의해 결정되므로 객체를 직접 추가하거나 제거할 수 없습니다.

예시

이메일 주소를 나타내는 문자열 collection인 emails 필드가 있는 Person이라는 Realm 유형을 생각해 보세요. 이 데이터는 사용자가 제어할 수 있습니다. 애플리케이션은 Person 인스턴스에서 이메일 주소를 추가하고 제거해야 합니다. 따라서 목록 을 사용하여 emails 의 필드 유형을 정의하세요.

반면에 25세 이상인 모든 Person에 대해 영역을 쿼리할 때는 결과 collection에 직접 Person을 추가하거나 제거하는 것은 합리적이지 않습니다. 해당 collection의 내용은 쿼리가 다른 Person 집합과 일치하는 경우에만 변경됩니다. 따라서 Realm은 결과 collection을 제공합니다.

참고

역일대다 관계

Realm은 암시적 역관계 collection의 내용을 자동으로 결정하므로 이러한 collection에서 객체를 추가하거나 제거할 수 없습니다. 따라서 이러한 일대다 관계 속성의 유형은 실제로 목록이 아닌 결과 collection입니다.

돌아가기

필드 유형

이 페이지의 내용