쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드업100제
  • 프로젝트회고
  • 컴포즈
  • 백준
  • 상속
  • 알고리즘
  • 코테
  • mvvm
  • Kotlin
  • Android
  • 기초100제
  • 코틀린코테
  • Room
  • 메소드
  • compose
  • 리사이클러뷰
  • DataBinding
  • Jetpack
  • Adapter
  • livedata
  • 변수
  • 객체지향
  • 자료구조
  • 코딩테스트
  • 자바
  • 배열
  • AAC
  • 코틀린
  • workmanager
  • ViewModel

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

[JETPACK개론] ROOM(1)
Android/JETPACK

[JETPACK개론] ROOM(1)

2022. 9. 2. 23:59

출처 : 안드로이드 공식 문서

전에 포스팅했던 글에서 SQLite에 대해서 다뤄보았다. 

SQLite 게시물 바로가기 ->

 

[JETPACK개론] SQLite(1)

앱을 이용하다보면 네트워크가 끊겼을 때 네트워크 오류입니다. 다시 시도해 주세요 라는 메세지를 본 적이 있다. 하지만 카카오톡 채팅방처럼 네트워크가 연결되어 있지 않은 상황에서도 잘

ssongcode.tistory.com

Room은 SQLite를 완벽히 활용하면서 원활한 데이터베이스 엑세스가 가능하도록 하는 업그레이드 버전이라 할 수 있다.

여러 장점이 있지만 반복적이고 오류가 발생하기 쉬운 상용구 코드를 최소화하는 것이 Room의 장점이다.

이러한 이유로 JetPack 라이브러리에 포함된 Room의 사용을 권장하고 있다!

Room 구성요소

데이터베이스

- 데이터베이스는 앱에 저장되어 있는 로컬 데이터에 대한 엑세스 포인트를 제공해주는 역할을 한다.

 

DAO

- DAO는 앱에서 데이터베이스의 데이터를 추가, 삭제, 업데이트 작업을 할 수 있는 메소드를 제공해주는 역할을 한다.

 

Entitiy

- 데이터베이스 내에 존재하는 테이블을 가리킨다.

 

백엔드 개발을 할 당시에 데이터베이스 설계부터 구현까지 직접 해본 경험이 있어, 조금 더 친숙하게 다가오는 것 같다!

그럼 이제 Room을 직접 사용해보자!

 

먼저 tableName과, 각각의 컬럼들이 정의되어있는 테이블, 즉 Entity 데이터클래스를 만들어주자.

@Entity(tableName = "text_table")
data class TextEntity (

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    var id : Int,
    @ColumnInfo(name = "text")
    var text : String

)

그 다음, 이 엔티티를 담고 있는 데이터베이스 클래스를 생성해주어, 데이터베이스 인스턴스를 생성해준다!!

@Database(entities = [TextEntity::class], version = 1)
abstract class TextDatabase : RoomDatabase() {

    abstract fun textDao() : TextDao

    companion object {
        @Volatile
        private var INSTANCE : TextDatabase? = null

        fun getDatabase(
            context : Context
        ) : TextDatabase {
            return INSTANCE ?: synchronized(this){
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    TextDatabase::class.java,
                    "text_database"
                )
                    .fallbackToDestructiveMigration()
                    .build()
                INSTANCE = instance
                instance
            }
        }

    }

}

마지막으로!! 실제로 데이터베이스에 접근하는 DAO를 만들어주어 간단한 쿼리까지 만들어보자!

@Dao
interface TextDao {

    @Query("SELECT * FROM text_table")
    fun getAllData() : List<TextEntity>

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    fun insert(text : TextEntity)

    @Query("DELETE FROM text_table")
    fun deleteAllData()

}

간단하게 데이터를 모두 조회, 삭제 할 수 있는 SELECT, DELETE문을 만들어주고,

데이터를 삽입하기 위한 Insert문 까지 만들어주었다!!

 

이제 이를 모두 확인하기 위해 다음과 같이 MainActivity에 구현하였다.

insertBtn.setOnClickListener {

    CoroutineScope(Dispatchers.IO).launch {
        db.textDao().insert(TextEntity(0, inputArea.text.toString()))
        inputArea.setText("")
    }

}

getAllBtn.setOnClickListener {
    CoroutineScope(Dispatchers.IO).launch {
        Log.d("MAINACTIVITY", db.textDao().getAllData().toString())
    }
}

deleteBtn.setOnClickListener {
    CoroutineScope(Dispatchers.IO).launch {
        db.textDao().deleteAllData()
    }
}

결과

 

위와 같이 잘 작동되는 것을 확인할 수 있다!!

다음 글에서는 Room을 다른 것들과 어떻게 활용할 수 있는지 공부해봐야겠다.

 

저작자표시 (새창열림)

'Android > JETPACK' 카테고리의 다른 글

[JETPACK개론] ROOM(3)  (0) 2022.09.05
[JETPACK개론] ROOM(2)  (0) 2022.09.03
[JETPACK개론] SQLite(2)  (0) 2022.08.30
[JETPACK개론] SQLite(1)  (0) 2022.08.29
[JETPACK개론] Retrofit + ViewModelScope + RV + Glide  (0) 2022.08.28
    'Android/JETPACK' 카테고리의 다른 글
    • [JETPACK개론] ROOM(3)
    • [JETPACK개론] ROOM(2)
    • [JETPACK개론] SQLite(2)
    • [JETPACK개론] SQLite(1)
    쏭식
    쏭식

    티스토리툴바