Mobil Geliştirmede Veri Kalıcılığı — Nedir, Yöntemler ve Nasıl Çalışır

Yazar: IT Sectr Yayınlanma: 2026-03-14 Okuma süresi: 8 dk

Veri kalıcılığı, kullanıcı bilgilerinin mobil uygulama oturumları arasında korunmasını sağlar. Bu teknoloji olmadan, her başlatma sıfırdan başlardı — ayarlar, geçmiş ve indirilen dosyalar kapatıldığında kaybolurdu. Google Developers, 2024'e göre, mobil uygulamaların %90'ından fazlası kullanıcı verilerini ve arayüz durumunu korumak için en az bir kalıcılık mekanizması kullanır.

Önemli Noktalar

  • Data Persistence — uygulama oturumları arasında veri koruma mekanizmaları
  • SharedPreferences — Android'de basit anahtar-değer çiftlerini depolama
  • SQLite — mobil cihazlar için gömülü ilişkisel veritabanı
  • Room — Android için Google'ın SQLite üzerinde ORM katmanı
  • Core Data — iOS ve macOS'ta nesne yönetim framework'ü

Veri Kalıcılığı Nedir

Data Persistence, bir uygulamanın cihazın kalıcı olmayan belleğinde veri kaydetme yeteneğidir. Mobil geliştirmede kalıcılık, veritabanlarını, dosya sistemini, ayarları ve önbelleği kapsar. Her mekanizmanın performans, güvenlik ve depolama kapasitesi açısından kendine özgü özellikleri vardır.

Geçici ve Kalıcı Veriler

Geçici veriler yalnızca RAM'de bulunur ve işlem sonlandığında kaybolur. Buna ekran durumu, geçici hesaplamalar ve görüntü önbelleği dahildir. Kalıcı veriler dosya sistemine veya veritabanına yazılır ve uygulama yeniden başlatıldıktan sonra da kullanılabilir olur. Buna kullanıcı ayarları, yetkilendirme token'ları, işlem geçmişi ve indirilen içerik dahildir.

Depolama Mekanizması Seçim Kriterleri

Bir depolama yöntemi seçerken geliştiriciler birkaç faktörü değerlendirir. Veri türü depolama yapısını belirler: basit ayarlar — SharedPreferences veya DataStore, yapılandırılmış kayıtlar — SQLite veya Room, dosyalar — File Storage. Veri hacmi performansı etkiler: veritabanları binlerce kayıt için optimize edilmiştir, dosyalar ise büyük ikili nesneler için uygundur. Güvenlik, EncryptedSharedPreferences veya SQLCipher aracılığıyla hassas bilgilerin şifrelenmesini gerektirir.

kotlin
data class StorageOption(
    name: String,
    dataType: StorageType,
    capacity: Long,
    secure: Boolean
)

enum class StorageType {
    KEY_VALUE,
    RELATIONAL,
    FILE
}

SharedPreferences ve DataStore

SharedPreferences, Android'de anahtar-değer çiftlerini depolamanın klasik yoludur. Bu API, platformun ilk sürümlerinden beri mevcuttur ve ilkel türleri destekler: dizeler, sayılar, boolean değerler. Veriler, uygulamanın özel dizinindeki bir XML dosyasında saklanır ve yalnızca kendi işlemi tarafından erişilebilir.

Alternatif Olarak DataStore

Jetpack DataStore, Kotlin Coroutines ve Flow üzerine inşa edilmiş modern bir SharedPreferences alternatifidir. DataStore iki varyant sunar: basit değerler için Preferences DataStore ve türlenmiş nesneler için Proto DataStore. SharedPreferences'ın aksine DataStore, eşzamanlı erişim altında veri tutarlılığını garanti eder ve ana iş parçacığını bloke etmeden asenkron işlemleri destekler.

kotlin
// SharedPreferences — geleneksel yaklaşım
val prefs = context
    .getSharedPreferences("settings", Context.MODE_PRIVATE)
with (prefs.edit()) {
    putString("username", "john_doe")
    putInt("score", 1500)
    apply()
}

// DataStore — asenkron yaklaşım
val settingsDataStore = context
    .createDataStore("settings.pb")

val usernameFlow: Flow<String> = settingsDataStore
    .data
    .map { it[USERNAME_KEY] ?: "" }

iOS'ta SharedPreferences'ın karşılığı UserDefaults'dır — Property List formatında basit değerleri depolayan bir sistem. UserDefaults senkron erişim kullanır ve küçük miktarda yapılandırma verisi için uygundur, ancak hassas bilgilerin saklanması için önerilmez.

Mobil Uygulamalarda SQLite

SQLite, ayrı bir sunucu olmadan uygulama işlemi içinde çalışan gömülü bir ilişkisel veritabanıdır. Mobil geliştirmede en yaygın DBMS'dir: her iki platformda da varsayılan olarak kullanılır. Android, SQLite'ı SDK'sına dahil eder, iOS ise libsqlite3 kütüphanesine dahil eder. SQLite standart SQL, işlemler, indeksler ve tetikleyicileri destekler.

Tablo Oluşturma ve CRUD İşlemleri

SQLite ile çalışmak, veritabanı şemasını tanımlamakla başlar. Geliştirici tabloları, alanları ve türlerini tanımlar, ardından ekleme, okuma, güncelleme ve silme işlemlerini gerçekleştirir. Android'de SQLiteOpenHelper veritabanı oluşturma ve geçişleri yönetirken, iOS C arayüzünü veya FMDB sarmalayıcısını kullanır.

kotlin
// Android'de SQLiteOpenHelper
class DBHelper(context: Context) :
    SQLiteOpenHelper(context, "app.db", null, 1) {

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL("""
            CREATE TABLE users (
                id INTEGER PRIMARY KEY,
                name TEXT NOT NULL,
                email TEXT UNIQUE
            )
        """)
    }

    fun insertUser(name: String, email: String) {
        val db = writableDatabase
        val values = ContentValues().apply {
            put("name", name)
            put("email", email)
        }
        db.insert("users", null, values)
    }
}
Veri TürüSharedPreferencesSQLiteDosya Sistemi
Türanahtar-değerilişkisel DBikili dosyalar
Hacimyüzlerce kayıtbinlerce kayıtmevcut alan
Performansyüksekortaboyuta bağlı
Tipik kullanımayarlaryapılandırılmış verigörseller, videolar

Room — Android için ORM

Room, SQLite üzerinde ORM katmanı sağlayan Jetpack kitaplığıdır. Room, SQL sorguları ve ContentValues yazmanın tekrarlayan işini ortadan kaldırır, bunları ek açıklamalar ve Kotlin işlevleriyle değiştirir. Room derleyicisi, derleme zamanında DAO (Data Access Object) uygulamalarını oluşturarak SQL sözdizimi hatalarını ortadan kaldırır.

Projede Room Kurulumu

Room'u entegre etmek için kapt bağımlılığını eklemeniz ve varlık sınıfını, DAO arayüzünü ve veritabanı sınıfını ek açıklamalarla işaretlemeniz gerekir. RoomDatabase giriş noktası olarak hizmet eder: onun aracılığıyla bir DAO alır ve veritabanı işlemlerini gerçekleştirirsiniz. Room, reaktif sorgular için Flow'u, şema geçişlerini ve derleme zamanı sorgu doğrulamasını destekler.

kotlin
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    @ColumnInfo(name = "full_name") val name: String,
    @ColumnInfo val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): Flow<List<User>>

    @Insert
    suspend fun insert(user: User)

    @Delete
    suspend fun delete(user: User)
}

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

Core Data — iOS Framework'ü

Core Data, bir nesne grafiğini yönetmek ve diske kaydetmek için Apple'ın framework'üdür. Room'un aksine Core Data, tablolarla değil, bir ilişkiler hiyerarşisi oluşturan yönetilen nesnelerle (NSManagedObject) çalışır. Core Data, tembel yükleme, değişiklikleri geri alma ve NSFetchRequest aracılığıyla karmaşık sorguları destekler.

Core Data Stack

Core Data'nın çekirdeği üç bileşenden oluşur: yönetilen nesne bağlamı (NSManagedObjectContext), kalıcı depo koordinatörü (NSPersistentStoreCoordinator) ve veri modeli (NSManagedObjectModel). NSPersistentContainer tüm bileşenleri tek bir giriş noktasında birleştirerek modern Swift uygulamaları için kurulumu basitleştirir.

swift
import CoreData

class PersistenceController {
    static let shared = PersistenceController()
    let container: NSPersistentContainer

    init() {
        container = NSPersistentContainer(name: "AppModel")
        container.loadPersistentStores { _, error in
            if let error = error {
                fatalError("Failed: \(error)")
            }
        }
    }

    func saveUser(name: String, email: String) {
        let context = container.viewContext
        let user = User(context: context)
        user.name = name
        user.email = email

        do {
            try context.save()
        } catch let error {
            print("Save error: \(error)")
        }
    }
}

Dosya depolama (File Storage), görselleri, videoları ve belgeleri kaydetmek için kullanılır. Android, dahili depolama (context.filesDir) — uygulamaya özel, ve harici depolama (Environment.getExternalStorageDirectory) — diğer uygulamalar tarafından erişilebilir alan sağlar. iOS'ta dosyalar Documents ve Library dizinlerinde saklanır; Library/Caches, iCloud'da yedeklenmeyen önbellek içindir. Dosya işlemleri için her iki platform da File API ve akış okuma/yazma işlemleri sağlar. Coil ve SDWebImage gibi modern kütüphaneler, optimum performans için dosya depolamayı RAM ile birleştiren bir önbellekleme katmanı ekler.

Android'de Core Data'ya karmaşıklık ve işlevsellik açısından bir alternatif Realm'dir — SQL katmanı olmadan doğrudan modellerle çalışan bir nesne veritabanıdır. Realm, okuma işlemlerinde SQLite'tan daha hızlıdır ve veri değiştiğinde UI'yı otomatik olarak güncelleyen canlı nesneleri destekler.

Sıkça Sorulan Sorular

Mobil geliştirmede Data Persistence nedir?

Data Persistence, uygulama yeniden başlatıldıktan sonra kullanılabilirliğini sağlamak için verileri cihazın kalıcı olmayan belleğinde kaydetme mekanizmalarını ifade eder. Bunlara veritabanları, dosya depolama ve ayar sistemleri dahildir.

Room, SQLite'ı doğrudan kullanmaktan nasıl farklıdır?

Room, SQL sorguları ve ContentValues yazma ihtiyacını ortadan kaldıran SQLite üzerinde bir ORM katmanıdır. Room SQL sorgularını derleme zamanında doğrular, Kotlin Coroutines ve Flow'u destekler ve otomatik olarak veri erişim kodu oluşturur.

SharedPreferences ne zaman kullanmalıyım?

SharedPreferences küçük miktarda basit veri depolamak için uygundur: uygulama ayarları, bayraklar, tanımlayıcılar ve kullanıcı tercihleri. Karmaşık veya yapılandırılmış veriler için Room veya DataStore kullanmak daha iyidir.

iOS'ta Core Data nedir?

Core Data, bir nesne grafiğini yönetmek için Apple'ın framework'üdür. Yönetilen nesneler, değişiklik izleme, tembel yükleme ve bir depoya (SQLite, XML veya ikili format) otomatik kaydetme sağlar.

Yeni bir proje için hangi depolama yöntemini seçmeliyim?

Seçim veri karmaşıklığına bağlıdır: ayarlar için — DataStore veya UserDefaults, yapılandırılmış kayıtlar için — Room (Android) veya Core Data (iOS), dosyalar için — File Storage. Kriterler arasında veri hacmi, performans gereksinimleri ve şifreleme ihtiyacı bulunur. Bir uygulamada birden fazla mekanizmayı birleştirmek, her yaklaşımın güçlü yönlerinden en iyi şekilde yararlanmayı sağlayan standart bir uygulamadır.

Özet

  • Data Persistence — her mobil uygulamanın temeli, oturumlar arasında kullanıcı verilerini korur
  • SharedPreferences ve UserDefaults — senkron erişimle anahtar-değer çiftlerini depolayan basit sistemler
  • SQLite — ek bağımlılık olmadan her iki platformda da bulunan gömülü ilişkisel veritabanı
  • Room — Flow aracılığıyla tür güvenliği ve reaktif sorgular sunan Google ORM çözümü
  • Core Data — otomatik değişiklik izleme ile karmaşık nesne grafiklerini yöneten Apple'ın güçlü framework'ü
  • DataStore — Coroutines ve Flow tabanlı asenkron API ile SharedPreferences'ın modern alternatifi

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun