KOTLIN

코틀린(Kotlin) 안드로이드 스튜디오 Room - ORM 라이브러리 사용-1

사과씨앗 2021. 1. 24. 16:54
728x90
반응형

안녕하세요 이번 글에서는 ORM의 라이브러리인 Room을 사용해보도록 하겠습니다.

 

* ORM( Object Relational Mapping )은 객체와 관계형 데이터베이스의 데이터를 맵핑하고 변환하는 기술로 복잡한 쿼리를 잘 몰라도 코드만으로 데이터베이스를 컨트롤할 수 있도록 도와줍니다.

 

먼저 프로젝트를 하나 생성한 뒤 라이브러리를 추가하여 주겠습니다.

 

buil.gradle(Module)로 이동하여 줍시다.

 

가장 위쪽에 plugins 블록 안에 아래 플러그인을 추가하여 줍니다.

  id 'kotlin-kapt'

 그다음 가장 아래 dependencies블록에 다음 코드를 넣어 준다음 sync now를 해줍시다.

    def room_version = "2.2.6"
    implementation "androidx.room:room-runtime:$room_version"
    kapt "androidx.room:room-compiler:$room_version"

버전이 맞이 않아 앱이 잘 실행이 되지 않을 경우 아래 링크에서 최신 버전을 확인해 주세요

developer.android.com/jetpack/androidx/releases/room

 

Room  |  Android 개발자  |  Android Developers

Room Room 지속성 라이브러리는 SQLite에 추상화 레이어를 제공하여 SQLite를 완벽히 활용하면서 더 견고한 데이터베이스 액세스를 가능하게 합니다. 최근 업데이트 현재 안정화 버전 다음 버전 후보

developer.android.com

* kept란? 

자바의 Pluggable Annoation Processing API를 Kotlin에서도 사용 가능하게 하는 것입니다.

 

ORM을 사용하기 위해 객체를 만들어 줍시다.

 

기본 패키지 아래 RoomMemo클래스를 하나 만들어 줍시다.

 

package com.example.room_kt

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey

//해당 테이블에 객체를 맵핑하기 위해서 Entity 를 선언하여 줍니다.
@Entity(tableName = "orm_memo")
class RoomMemo {
    
    // ColumnInfo 을 선언하여 해당 프로퍼티를 테이블의 컬럼으로 사용된다는 것을 명시합니다.
    // PrimaryKey 를 지정하여 주고 옵션으로 autoGenerate 를 true 로 지정하여 주면 Key 가 자동증가 하도록 해줍니다.
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo
    var id:Long? = null

    @ColumnInfo
    var content:String = ""

    @ColumnInfo
    var datetime:Long = 0

    constructor(content:String, datetime:Long){
        this.content = content
        this.datetime = datetime
    }

}

 

다음 DB의 DML 메서드를 구현하기 위해 RoomMemoDao 인터페이스를 생성하여 줍시다.

 

package com.example.room_kt

import android.icu.text.Replaceable
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.OnConflictStrategy.*

//Dao 를 선언하여 줍시다.
@Dao
interface RoomMemoDao {
    @Query("select * from orm_memo")
    fun getAll():List<RoomMemo>

    //onConflict 를 적용하면 동일한 값이 입력 됬을시 update 쿼리를 실행시켜 줍니다.
    @Insert(onConflict = REPLACE)
    fun insert(memo:RoomMemo)

    @Delete
    fun delete(memo:RoomMemo)

}

 

다음으로 RoomMemoDao를 사용하기 위한 구현체인 RoomHelper 클래스를 만들어 줍니다.

 

package com.example.room_kt

import androidx.room.Database
import androidx.room.RoomDatabase

//entities = Room 라이브러리가 사용할 엔티티 클래스 목록
//version  = 데이터 베이스 의 버전
//exportSchema = true 면 스키마 정보를 파일로 출렵 합니다.
@Database(entities = arrayOf(RoomMemo::class),version = 1,exportSchema = false)
abstract class RoomHelper: RoomDatabase() {
    //실제로 사용될 구현체 메소드
    abstract fun roomMemoDao():RoomMemoDao
}

 

이번 글에서는 기본적으로 Room을 이용하여 기본 기능들을 정의하였습니다. 

 

다음 글에서 이것을 가지고 뷰에서 활용하여 보겠습니다.

 

감사합니다.

 

728x90
반응형