Kotlin meetup realm

코틀린과 Realm 써보기

첫번째 코틀린 모임이 강남소재의 교육 스타트업인 Riiid 사무실에서 있었습니다. Riiid 는 데이터 기술을 통해 교육기회의 평준화를 목표로 하는 스타트업입니다. 이 모임 발표중 김용욱 님이 발표하신 Realm 과 Kotlin 사용에 대한 세션 영상을 정리하여 공개합니다

이 모임은 교육 스타트업인 Riiid(뤼이드)에서 안드로이드 개발자로 근무하고 계신 허재위 님 사회로 진행되었습니다. 아래 개요를 정리하였지만 동영상에서 데모와 함께 매우 쉽게 설명되어있으니 동영상을 보시는 것을 추천드립니다.


클래스가 없는 함수와 익스텐션

코틀린은 클래스가 없는 함수와 기존의 객체의 행동을 수정하는 익스텐션이 있습니다. 어떻게 이런게 가능할까요? 코틀린은 파일명이 a.kt인 경우에 AKt라는 클래스를 만들고 그 속에 스태틱 메서드를 생성합니다. 익스텐션도 비슷한 과정을 거칩니다. javap로 어떤 객체에 어떠 스태틱 메서드들이 있는지 확인할 수 있습니다.

이런 개발 뉴스를 더 만나보세요

Realm에서 코틀린 언어의 프로그래밍 언어의 기초적인 내용과 스태틱 메서드가 어덯게 구현이 되는지는 아래를 참고하세요.

  1. 안녕하세요. 코틀린 #1
  2. 안녕하세요. 코틀린 #2
  3. 안녕하세요. 코틀린 #3

Realm Java

Realm은 빠르고, 견고하고, 사용하기 편한 모바일 데이터 베이스입니다. 모바일 데이터베이스는 기존에 SQLite가 점유하고 있었는데 10년이 넘은 데이터베이스이기 때문에 느린 편입니다. 왜 빠른지는 국내와 해외에 발표한 Realm 발표를 들어보세요. MVCC의 장점 때문에 읽기에는 별도의 트랜잭션없이 쓰기 트랜잭션만 가지고 사용할 수 있습니다. 사용법은 아주 간단합니다. 자세한 내용은 공식 문서를 참고하세요.

Realm Kotlin

기본적으로는 자바를 위해 Realm을 쓸 때와 코틀린에서 쓸 때는 큰 차이는 없습니다. 자바 코드는 손 쉽게 메뉴에서 코틀린으로 바꿀 수 있으니 변환부터 시작합시다.

build.gradle 설정

buildscriptrepositories 항목에서 mavenCentral() 대신에 jcenter()로 바꾸어야 합니다. jcenter는 maven central의 상위집합이기 때문에 maven central의 모든 라이브러리를 가지며 동시에 jcenter만의 라이브러리를 가집니다. 코틀린 관련 라이브러리가 jcenter에 있기 때문에 jcenter로 바꿉니다. 이외에도 jcenter는 캐슁이나 다운로드 정책에서 maven central보다 낫기 때문에 안드로이드의 공식 리포지토리는 jcenter입니다.

그 외에 추가적으로 buildscriptdependenciesclasspath "io.realm:realm-gradle-plugin:<realm-version>"을 입력해야 합니다. 현재 최신 버전은 0.88.2 버전이고 이를 위해서는 classpath "io.realm:realm-gradle-plugin:0.88.2"라고 명기합니다.

마지막으로 아래에 apply plugin: 'realm-android'를 통해 realm-android 플러그인을 활성화합니다. 0.87 버전까지는 코틀린을 위한 kapt를 추가했어야 했는데 0.88 버전 부터는 이것으로 충분합니다.

모델 만들기

기본적인 모델의 모양은 다음과 같습니다.

public open class Cat : RealmObject() {
  public open var name: String? = null
}

final 키워드를 추가하는 자바와는 반대로 코틀린은 기본이 final이고 open 키워드로 개방해야 합니다. 우리는 name 프로퍼티가 String 타입이며 부가적인 것이라 null이 될 수 있다고 ?를 추가하였습니다. 코틀린의 프로퍼티를 사용할 때는 게터와 세터를 새롭게 만들 필요는 없습니다.

모델 사용하기

사용하는 것도 어렵지 않습니다. 아래의 코드를 참고하세요.

private var realm: Realm by Delegates.notNull()
private var realmConfig: realmConfiguration by Delegates.notNull()

...

realmConfig = RealmConfiguration.Builder(this).build()
Realm.deleteRealm(realmConfig)
realm = Realm.getInstance(realmConfig)

realm.beginTransaction()
var cat = realm.createObject(Cat::class.java)
cat.name = "뽀삐"
realm.commitTransaction()

Delegates.notNull로 지정된 것은 나중에 초기화될 것이니 null을 사용하는 것을 허락하지 말라는 의미입니다.

Cat::class.java는 자바 클래스를 가져오기 위한 부분이다. 자바에서 쓸 때와 가장 큰 차이 점 중의 하나입니다. 게터와 세터를 쓰지 않고 직접 접근하는 것에도 주목하세요.

Gradle 플러그인

의존성이 복잡할 때는 플러그인을 만드는 것이 좋습니다. Realm의 플러그인의 코드를 중심으로 살펴봅시다. resources/META-INF/gradle-pluginsrealm-android.properties 파일이 있는 것을 살필 수 있습니다. 이 파일이 realm-android 플러그인에 대해 기술하는 부분입니다. 내용은 단순합니다. implementation-class=<plugin-class>으로 플러그인을 담당할 클래스를 지정합니다. 해당 플러그인 클래스는 대부분 그루비(Groovy)언어로 작성합니다. Plugin<Plugin>을 구현(implements)하고 apply 메서드를 구현하면 됩니다.

다음: 안드로이드를 위한 Realm #2: Android 실시간 검색 컨트롤러 만들기

General link arrow white

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.

Realm Team

Realm의 미션은 더 나은 앱을 빠르게 개발할 수 있도록 돕는 것입니다. 이를 위해 저희는 개발자들이 실시간 협업, 가상 현실, 라이브 데이터 동기화, 오프라인 경험, 메시징 등 정교하고 강력한 기능을 쉽게 개발할 수 있도록 하는 개발 도구와 플랫폼을 제공하고 있습니다.

저희는 모바일 인터넷이 수많은 사용자와 보다 많은 디바이스가 속한 개방형 네트워크와 이들 간의 실시간 상호 작용으로 진화할 것이라고 믿으며, 개발자가 이같은 방향으로 발전할 수 있도록 돕기 위해 저희 제품들을 개발하고 있습니다.

4 design patterns for a RESTless mobile integration »

close