본문 바로가기

안드로이드

[Android] - 내장 DB 룸에 대하여

안드로이드에서 로컬 데이터를 저장할 일이 생기면 자연스럽게 Room을 떠올리게 된다.
Room은 SQLite를 추상화한 라이브러리다.
쉽게 말하면, SQLite를 직접 다루지 않고도 편하게 쓸 수 있도록 도와주는 친구다.


Room은 왜 쓸까?

안드로이드에는 SQLite라는 내장 데이터베이스가 있다. 하지만 SQLite는 SQL 쿼리를 직접 써야 하고, 타입도 다 문자열로 관리해야 해서 불편하다.
Room은 이런 불편함을 줄이고, 안전하고 간단하게 DB를 다룰 수 있게 도와준다.

  • 컴파일 시점에 SQL 쿼리를 검사해준다.
  • 코틀린 데이터 클래스와 잘 맞는다.
  • Flow, LiveData 같은 비동기 스트림 처리와도 자연스럽게 연결된다.

 

 

Room의 3가지 핵심 구성 요소

Room은 아래 3가지로 이루어진다.

1. @Entity

실제 DB 테이블이 된다.
Room은 이 클래스를 보고 테이블을 자동으로 만들어준다.
각 변수는 테이블의 컬럼이 되고, @PrimaryKey로 기본 키를 지정해줄 수 있다.

kotlin
복사편집
@Entity data class User( @PrimaryKey val id: Int, val name: String, val age: Int )

 

2. @Dao

데이터에 접근하는 메서드들을 모아놓은 인터페이스다.
Insert, Delete, Query 등 데이터 조작을 위한 명령들을 여기서 정의한다.

kotlin
복사편집
@Dao interface UserDao { @Query("SELECT * FROM User") fun getAll(): Flow<List<User>> @Insert suspend fun insert(user: User) @Delete suspend fun delete(user: User) }

Room이 이 인터페이스를 보고 자동으로 구현체를 만들어준다.
그래서 우리는 비즈니스 로직에 집중하면 된다.

 

3. @Database

실제 DB 객체를 만들어주는 추상 클래스다.
여기서 어떤 Entity와 Dao를 쓸 건지 Room에게 알려줘야 한다.

kotlin
복사편집
@Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }

보통은 싱글톤으로 만들어서 앱 전체에서 공용으로 쓰도록 한다.


마무리

Room은 복잡한 SQLite를 간단하게 감싸주는 도구다.
Entity, Dao, Database 이 3가지 구조만 제대로 이해하면 어렵지 않게 쓸 수 있다.

무작정 쓰는 것도 좋지만, 왜 쓰는지, 어떤 구조로 작동하는지 알고 쓰면 훨씬 안정적이고 유지보수도 쉬워진다.
다음 글에서는 실제로 Room을 프로젝트에 적용하는 방법도 정리해볼 예정이다.