티스토리 뷰

728x90
반응형
SMALL

안녕하세요, 안드로이드 앱 개발을 공부하시는 여러분! 이번에는 안드로이드 앱에서 데이터를 저장하고 관리하는 기초적인 방법들을 살펴보겠습니다. 사용자의 정보, 앱의 상태, 또는 설정과 같은 다양한 데이터를 어떻게 효과적으로 다룰 수 있는지에 대해 알아봅시다.

1. SharedPreferences를 활용한 간단한 데이터 저장

안드로이드에서는 SharedPreferences를 사용하여 간단한 키-값 형태의 데이터를 저장할 수 있습니다. 이를 활용하여 사용자 설정이나 간단한 데이터를 저장할 수 있습니다.

// 데이터 저장
val preferences = getSharedPreferences("myPrefs", Context.MODE_PRIVATE)
val editor = preferences.edit()
editor.putString("username", "JohnDoe")
editor.apply()

// 데이터 불러오기
val savedUsername = preferences.getString("username", "Guest")

2. 파일 시스템을 활용한 데이터 저장

좀 더 복잡한 데이터나 구조적인 데이터를 저장할 때는 파일 시스템을 활용할 수 있습니다. 텍스트 파일 또는 이진 파일을 사용하여 데이터를 저장하고 불러올 수 있습니다.

// 데이터 저장
val filename = "userData.txt"
val data = "User information: JohnDoe, 28"

context.openFileOutput(filename, Context.MODE_PRIVATE).use {
    it.write(data.toByteArray())
}

// 데이터 불러오기
val fileContent = context.openFileInput(filename).bufferedReader().use {
    it.readText()
}

3. SQLite 데이터베이스를 활용한 데이터 관리

더 복잡하고 구조적인 데이터를 다룰 때는 SQLite 데이터베이스를 활용할 수 있습니다. 안드로이드에서는 SQLiteOpenHelper를 상속받아 데이터베이스를 생성하고 관리할 수 있습니다.

// 데이터베이스 생성 및 업그레이드
class MyDatabaseHelper(context: Context) : SQLiteOpenHelper(context, "myDatabase", null, 1) {
    override fun onCreate(db: SQLiteDatabase?) {
        // 테이블 생성 및 초기 데이터 추가
        db?.execSQL("CREATE TABLE users (_id INTEGER PRIMARY KEY, username TEXT)")
        db?.execSQL("INSERT INTO users (username) VALUES ('JohnDoe')")
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        // 데이터베이스 업그레이드 로직
    }
}

// 데이터베이스 사용 예시
val dbHelper = MyDatabaseHelper(context)
val db = dbHelper.writableDatabase

// 데이터 삽입
val values = ContentValues().apply {
    put("username", "JaneDoe")
}

val newRowId = db.insert("users", null, values)

4. Room 라이브러리를 활용한 데이터베이스

Room 라이브러리는 SQLite를 더 편리하게 다룰 수 있도록 도와주는 라이브러리입니다. 데이터베이스, 엔터티, DAO 등을 정의하여 사용할 수 있습니다.

// 엔터티 정의
@Entity(tableName = "users")
data class User(
    @PrimaryKey(autoGenerate = true)
    val id: Int = 0,
    val username: String
)

// 데이터베이스 정의
@Database(entities = [User::class], version = 1)
abstract class MyAppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

// DAO 정의
@Dao
interface UserDao {
    @Insert
    fun insert(user: User)

    @Query("SELECT * FROM users")
    fun getAllUsers(): List<User>
}

// 데이터베이스 사용 예시
val db = Room.databaseBuilder(context, MyAppDatabase::class.java, "myAppDatabase").build()

// 데이터 삽입
val user = User(username = "Alice")
db.userDao().insert(user)

// 데이터 조회
val allUsers = db.userDao().getAllUsers()

5. 통합 예제: 사용자 목록 관리 앱

이제 위에서 배운 방법들을 활용하여 간단한 사용자 목록 관리 앱을 만들어보겠습니다. 사용자 목록을 추가하고 저장하며, 어떻게 데이터를 관리할 수 있는지 확인해봅시다.

// MainActivity.kt
class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var db: MyAppDatabase

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        db = Room.databaseBuilder(this, MyAppDatabase::class.java, "myAppDatabase").build()

        setupUI()
    }

    private fun setupUI() {
        binding.addButton.setOnClickListener { onAddClick() }
        loadUsers()
    }

    private fun onAddClick() {
        val username = binding.usernameEditText.text.toString()
        if (username.isNotBlank()) {
            val user = User(username = username)
            db.userDao().insert(user)
            loadUsers()
            binding.usernameEditText.text.clear()
        } else {
            Toast.makeText(this, "Please enter a username", Toast.LENGTH_SHORT).show()
        }
    }

    private fun loadUsers() {
        val users = db.userDao().getAllUsers()
        val userList = users.joinToString("\n") { it.username }
        binding.userListTextView.text = if (userList.isNotBlank()) userList else "No users yet"
    }
}

마무리

이제 여러분은 안드로이드 앱에서 데이터를 어떻게 저장하고 관리하는지에 대해 기본적인 개념을 알게 되었습니다. SharedPreferences, 파일 시스템, SQLite 데이터베이스, 그리고 Room 라이브러리를 사용하여 데이터를 효과적으로 관리하는 방법을 배웠습니다. 다음에는 사용자 입력과 이벤트 처리에 대해 알아보도록 하겠습니다. 계속해서 흥미로운 Kotlin 코딩되세요! 🚀

728x90
반응형
LIST
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함