data class Kotlin'de yalnızca veri depolamak için tasarlanmış özel bir sınıf türüdür. Derleyici, birincil oluşturucuda belirtilen özelliklere dayanarak equals, hashCode, toString, copy ve componentN metotlarını otomatik olarak oluşturur. JetBrains belgelerine (2026) göre data class, Java eşdeğerlerine kıyasla kalıp kod miktarını %50–70 oranında azaltır ve Kotlin projelerinde değer nesnelerinin temelini oluşturur.
Önemli Noktalar
data class, ana amacı veri depolamak olan sınıflar için otomatik olarak standart metotlar oluşturan bir Kotlin sözdizimi yapısıdır. Bir data class bildirirken, derleyici birincil oluşturucudaki tüm özelliklere dayanarak equals, hashCode, toString, copy ve componentN uygulamalarını oluşturur.
Geliştiricinin IDE veya Lombok gibi kütüphaneler kullanarak manuel olarak getter, setter, equals, hashCode ve toString yazması gereken Java'daki normal sınıfların aksine, Kotlin yerleşik bir mekanizma sağlar. Bu sadece kodu azaltmakla kalmaz, aynı zamanda tutarlılığı da garanti eder — otomatik metotlar her zaman mevcut özellik yapısına karşılık gelir.
JetBrains Kotlin Anketine (2025) göre data class, Kotlin projelerinin %78inde kullanılmakta olup, dilin en çok talep edilen özelliklerinden biridir. Özellikle DTO, API yanıt modelleri ve MVVM'de durum nesneleri içeren mimarilerde popülerdir.
data class, class anahtar kelimesinden önce data anahtar kelimesiyle bildirilir. Otomatik metotlara katılan tüm özellikler birincil oluşturucuda belirtilir.
data class User(
val id: Int,
val name: String,
val email: String
)
Tek bir kod satırı, Java'daki düzinelerce kalıp kod satırının yerini alır. Derleyici, her üç özellik için de equals, hashCode, toString, copy ve component1–component3'ü oluşturur.
Otomatik metotlar yalnızca birincil oluşturucunun özelliklerini içerir. Sınıf gövdesinde bir özellik bildirilirse, equals, hashCode, toString ve copy'ye katılmaz.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice is NOT included in equals/hashCode/copy
}
Bir data class'ın birincil oluşturucusu en az bir parametre içermelidir. Tüm parametreler val veya var olarak işaretlenmelidir. Bir data class için open, abstract, sealed veya inner değiştiricileri kullanılamaz.
equals ve hashCode, birincil oluşturucudaki tüm özelliklerin değerlerine dayanarak oluşturulur. Bir data class'ın iki örneği, karşılık gelen tüm özellikleri eşitse eşit kabul edilir.
Java'da, varsayılan nesne karşılaştırması referans karşılaştırmasıdır (==). Değer karşılaştırması, equals'ın geçersiz kılınmasını gerektirir. Kotlin data class bunu otomatik olarak yaparak yapısal karşılaştırma için == kullanımına izin verir.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // true
toString metodu, tüm özelliklerin adları ve değerleriyle birlikte nesnenin okunabilir bir temsilini döndürür. Bu, varsayılan çıktının onaltılık biçimde karma kodunu gösterdiği Java'ya kıyasla günlüğe kaydetmeyi ve hata ayıklamayı önemli ölçüde basitleştirir.
Kotlin Belgelerine (2026) göre, bir data class'ın toString biçimi “User(id=1, name=John, email=john@example.com)” şeklindedir. Birincil oluşturucudan özellikler kaldırıldığında, toString otomatik olarak güncellenir — senkronizasyon bozulması riski ortadan kalkar.
copy, data class'ın temel özelliklerinden biridir. Belirtilen özelliklerin değerlerini değiştirme imkanı ile nesnenin yüzeysel bir kopyasını oluşturur.
data class Order(
val id: Long,
val status: String,
val amount: Double
)
val order = Order(1L, "Pending", 299.99)
val updatedOrder = order.copy(status = "Confirmed")
// updatedOrder.id = 1L, amount = 299.99, status = "Confirmed"
copy, işlevsel stilde ve değişmezlik (immutability) içeren mimarilerde vazgeçilmezdir. Var olan bir nesneyi değiştirmek yerine, değiştirilmiş alanlarla yeni bir kopya oluşturulur, bu da kodu daha öngörülebilir ve çok iş parçacıklı senaryolarda güvenli kılar.
data class, bildirim sırasına göre her özellik için otomatik olarak component1, component2 vb. işlevleri oluşturur. Bu, nesnenin değişkenlere ayrıştırılmasını sağlar.
val user = User(1, "Alice", "alice@example.com")
val (id, name, email) = user
println("$id: $name ($email)") // "1: Alice (alice@example.com)"
Yapı çözümleme, lambda ve for-each döngülerinde de çalışır ve data class'ı koleksiyonlarla çalışmak için kullanışlı hale getirir.
İlk sınırlama — data class, başka bir data class'tan kalıtımı desteklemez. Yalnızca normal sınıflardan veya arayüzlerden kalıtım alınabilir.
İkinci — otomatik metotlar yalnızca birincil oluşturucunun özelliklerini içerir. Sınıf gövdesindeki özellikler yok sayılır, bu da bunu unutursanız hatalı equals'a yol açabilir.
Üçüncü — data class open, abstract, sealed veya inner olamaz. Her zaman final'dir.
Dördüncü — data class içindeki koleksiyonlar için copy, yüzeysel kopyalama yapar. Kopyalanan koleksiyon içindeki öğelerin değiştirilmesi orijinali etkileyecektir.
Kotlin En İyi Uygulamalarına (2026) göre data class, DTO'lar, API modelleri, değer nesneleri ve durum nesneleri için idealdir. İş mantığı olan bileşenler için normal sınıfların kullanılması önerilir.
Sıkça Sorulan Sorular
Hayır, bir data class başka bir data class'tan miras alamaz. Ancak normal bir sınıftan miras alabilir veya arayüzleri uygulayabilir.
En az bir özellik. Maksimum sayı sınırlı değildir, ancak yapı çözümleme için componentN oluşturulur.
Hayır, otomatik metotlar yalnızca birincil oluşturucunun özelliklerini dikkate alır. Sınıf gövdesindeki özellikler equals, hashCode, toString ve copy'ye katılmaz.
Evet, siz data class gövdesinde equals, hashCode veya toString'i geçersiz kılabilirsiniz. Bu durumda derleyici kendi uygulamasını oluşturmaz.
Bir data class otomatik olarak equals, hashCode, toString, copy ve componentN oluşturur. Normal bir sınıf, manuel uygulama olmadan bu metotları sağlamaz.
Özet
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.
Ayrıca okuyun