Android Room

Android Room 라이브러리는 SQLite 데이터베이스와 상호작용하기 위해 Google이 제공하는 ORM(Object Relational Mapping) 라이브러리입니다. Room은 직접적인 SQLite 접근의 복잡성을 줄이고, 타입 세이프티, 보일러플레이트 코드 감소, SQLite 쿼리의 컴파일 타임 검사를 제공하여 보다 간편하고 안전한 데이터베이스 관리를 가능하게 합니다.

주요 구성 요소

  1. Entity: 데이터베이스 테이블을 나타내는 클래스.
  2. DAO (Data Access Object): 데이터베이스 작업(쿼리, 삽입, 삭제, 업데이트 등)을 정의하는 인터페이스.
  3. Database: 데이터베이스를 보유하고 데이터베이스 인스턴스를 제공하는 추상 클래스.

Room 사용법

1. Room 라이브러리 종속성 추가

build.gradle 파일에 Room 라이브러리 종속성을 추가합니다.

dependencies {
    def room_version = "2.5.0"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // Kotlin users should use kapt instead of annotationProcessor
    kapt "androidx.room:room-compiler:$room_version"

    // Optional - RxJava support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // Optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // Optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

2. Entity 정의

@Entity 어노테이션을 사용하여 데이터베이스 테이블을 정의합니다.

import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity(tableName = "user")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;

    public String name;
    public int age;

    // Constructor, getters, and setters can be added here
}

3. DAO 정의

@Dao 어노테이션을 사용하여 데이터베이스 작업을 정의합니다.

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

@Dao
public interface UserDao {
    @Insert
    void insert(User user);

    @Update
    void update(User user);

    @Delete
    void delete(User user);

    @Query("SELECT * FROM user")
    List<User> getAllUsers();

    @Query("SELECT * FROM user WHERE id = :userId")
    User getUserById(int userId);
}

4. Database 클래스 정의

@Database 어노테이션을 사용하여 데이터베이스 홀더를 정의합니다.

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

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

5. Database 인스턴스 생성 및 사용

데이터베이스 인스턴스를 생성하고 DAO를 통해 데이터베이스 작업을 수행합니다.

import android.content.Context;
import androidx.room.Room;

public class DatabaseClient {
    private Context context;
    private static DatabaseClient instance;

    private AppDatabase appDatabase;

    private DatabaseClient(Context context) {
        this.context = context;

        // Create the database instance
        appDatabase = Room.databaseBuilder(context, AppDatabase.class, "MyDatabase").build();
    }

    public static synchronized DatabaseClient getInstance(Context context) {
        if (instance == null) {
            instance = new DatabaseClient(context);
        }
        return instance;
    }

    public AppDatabase getAppDatabase() {
        return appDatabase;
    }
}

사용 예제:

DatabaseClient dbClient = DatabaseClient.getInstance(context);
UserDao userDao = dbClient.getAppDatabase().userDao();

// Insert a new user
User user = new User();
user.name = "John Doe";
user.age = 30;
userDao.insert(user);

// Get all users
List<User> users = userDao.getAllUsers();

종합

Android Room 라이브러리는 SQLite 데이터베이스와 상호작용할 때 발생할 수 있는 복잡성을 크게 줄여주며, 안전하고 효율적인 데이터베이스 관리 기능을 제공합니다. 이를 통해 개발자는 보일러플레이트 코드를 줄이고, 데이터베이스 쿼리의 정확성을 보장하며, 보다 직관적인 방법으로 데이터를 관리할 수 있습니다. Room 라이브러리는 Entity, DAO, Database 클래스의 세 가지 주요 구성 요소를 사용하여 데이터를 쉽게 저장, 조회, 업데이트, 삭제할 수 있게 해줍니다.

Leave a Reply

Your email address will not be published. Required fields are marked *