2025-06-11
Kotlin Data Class'ları ve Java POJO'ları: Pratik Bir Karşılaştırma
Java POJO'ları, Kotlin'in 3 satırda ifade ettiği şey için 50 satır şablon kod gerektirir. Her yaklaşımla gerçekte ne elde ettiğiniz işte burada.
Şablon Kod Sorunu
4 alanlı basit bir Java POJO User nesnesi şunları gerektirir:
- 4 private alan
- 4 getter
- 4 setter
- Bir constructor
equals()vehashCode()toString()
Bu, kavramsal olarak önemsiz bir şey için yaklaşık 50 satır demektir.
Kotlin'in Cevabı: Data Class'lar
data class User(
val id: Long,
val name: String,
val email: String,
val isActive: Boolean
)
4 satır. Derleyici equals(), hashCode(), toString() ve copy()'yi otomatik olarak üretir.
Varsayılan Olarak Değişmezlik
var yerine val kullanımına dikkat edin. Kotlin değişmez veriyi teşvik eder — bir kez oluşturulduğunda, bir User değiştirilemez. Bunun yerine değiştirilmiş bir kopya oluşturursunuz:
val updated = user.copy(email = "new@example.com")
Bu, paylaşılan değiştirilebilir durumun beklenmedik davranışlara neden olduğu hata sınıfının tamamını ortadan kaldırır.
Java Record'ları (Java 16+)
Java sonunda Kotlin'e record'larla yanıt verdi:
public record User(long id, String name, String email, boolean isActive) {}
Record'lar değişmez, kompakt ve aynı şablon kodu otomatik olarak üretir. JDK 16+ üzerindeki yeni Java kod tabanları için record'lar, yalnızca veri içeren sınıflar için doğru seçimdir.
Serileştirme Değerlendirmeleri
Hem Kotlin data class'ları hem de Java record'ları Jackson ve Gson ile iyi çalışır, ancak küçük yapılandırma farklılıkları gerektirir:
- Kotlin + Jackson: build'inize
jackson-module-kotlinekleyin - Java Records + Jackson: Jackson 2.12+'de kutudan çıktığı gibi çalışır
- Gson + Records: TypeAdapterFactory geçici çözümü gerektirir
Dönüştürücümüz her iki varyantı da üretir, böylece stack'inize uyan birini kopyalayabilirsiniz.