Kotlin'de data class — nedir, sözdizimi ve veri sınıflarının özellikleri

Yazar: IT Sectr Yayınlanma: 2026-06-20 Okuma süresi: 10 dk

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 — Kotlin'de veri sınıfı bildirmek için anahtar kelime
  • equals ve hashCode — birincil oluşturucunun tüm özelliklerine dayanarak otomatik olarak oluşturulur
  • copy — tek tek alanları değiştirme imkanı ile yüzeysel kopyalama işlevi
  • componentN — data class'ı ayrı değişkenlere ayırma
  • Birincil oluşturucu en az bir val veya var parametresi içermelidir

Kotlin'de data class nedir?

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.

Sözdizimi ve temel özellikler

data class, class anahtar kelimesinden önce data anahtar kelimesiyle bildirilir. Otomatik metotlara katılan tüm özellikler birincil oluşturucuda belirtilir.

kotlin
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.

Birincil oluşturucu dışındaki özellikler

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.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice is NOT included in equals/hashCode/copy
}

Birincil oluşturucu sınırlamaları

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.

Otomatik metotlar equals, hashCode ve toString

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.

Değer karşılaştırması için equals

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.

kotlin
data class Address(
    val city: String,
    val street: String
)

val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2)  // true

Hata ayıklama için toString

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 işlevi ve yapı çözümleme

copy, data class'ın temel özelliklerinden biridir. Belirtilen özelliklerin değerlerini değiştirme imkanı ile nesnenin yüzeysel bir kopyasını oluşturur.

kotlin
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.

componentN ile yapı çözümleme

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.

kotlin
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.

Sınırlamalar ve öneriler

İ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

Bir data class başka bir data class'tan miras alabilir mi?

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.

Birincil oluşturucuda kaç özellik olmalıdır?

En az bir özellik. Maksimum sayı sınırlı değildir, ancak yapı çözümleme için componentN oluşturulur.

Sınıf gövdesindeki özellikler equals'ı etkiler mi?

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.

Otomatik metotları manuel olarak geçersiz kılabilir miyim?

Evet, siz data class gövdesinde equals, hashCode veya toString'i geçersiz kılabilirsiniz. Bu durumda derleyici kendi uygulamasını oluşturmaz.

Data class normal bir sınıftan nasıl farklıdır?

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

  • data class — otomatik oluşturulan metotlarla veri depolamak için Kotlin sözdizimi yapısı
  • equals ve hashCode — birincil oluşturucu özelliklerine dayalı yapısal karşılaştırma
  • toString — hata ayıklama ve günlüğe kaydetme için nesnenin okunabilir temsili
  • copy — adlandırılmış argümanlarla tek tek alanların değiştirildiği yüzeysel kopyalama
  • componentN — koleksiyonlarla rahat çalışma için nesnelerin değişkenlere ayrıştırılması
  • Sınırlamalar — varsayılan olarak final, en az bir özellik, data->data kalıtımı yok
  • Kullanım — DTO, API modelleri, değer nesneleri, MVVM'de durum

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