data class di Kotlin — apa itu, sintaksis dan fitur kelas data

Penulis: IT Sectr Diterbitkan: 2026-06-20 Waktu membaca: 10 mnt

data class di Kotlin adalah tipe kelas khusus yang dirancang semata-mata untuk menyimpan data. Compiler secara otomatis menghasilkan metode equals, hashCode, toString, copy dan componentN berdasarkan properti yang ditentukan di primary constructor. Menurut dokumentasi JetBrains (2026), data class memungkinkan pengurangan volume kode boilerplate sebesar 50–70% dibandingkan dengan padanan Java dan menjadi dasar untuk value-objek di proyek Kotlin.

Poin utama

  • data — kata kunci untuk mendeklarasikan kelas data di Kotlin
  • equals dan hashCode — dihasilkan secara otomatis berdasarkan semua properti primary constructor
  • copy — fungsi penyalinan dangkal dengan kemampuan mengganti bidang individual
  • componentN — destrukturisasi data class menjadi variabel terpisah
  • Primary constructor harus mengandung setidaknya satu parameter val atau var

Apa itu data class di Kotlin?

data class adalah konstruksi sintaksis Kotlin yang secara otomatis menghasilkan metode standar untuk kelas yang tujuan utamanya adalah menyimpan data. Saat mendeklarasikan data class, compiler membuat implementasi equals, hashCode, toString, copy dan componentN berdasarkan semua properti dari primary constructor.

Tidak seperti kelas biasa di Java, di mana pengembang harus menulis getter, setter, equals, hashCode dan toString secara manual menggunakan IDE atau pustaka seperti Lombok, Kotlin menyediakan mekanisme built-in. Ini tidak hanya mempersingkat kode, tetapi juga menjamin konsistensi — metode otomatis selalu sesuai dengan struktur properti saat ini.

Menurut data JetBrains Kotlin Survey (2025), data class digunakan di 78% proyek Kotlin, menjadikannya salah satu fitur bahasa yang paling banyak dicari. Ini sangat populer dalam arsitektur dengan DTO, model respons API, dan objek status di MVVM.

Sintaksis dan kemampuan utama

data class dideklarasikan dengan kata kunci data sebelum class. Semua properti yang berpartisipasi dalam metode otomatis ditentukan di primary constructor.

kotlin
data class User(
    val id: Int,
    val name: String,
    val email: String
)

Satu baris kode menggantikan puluhan baris boilerplate di Java. Compiler menghasilkan equals, hashCode, toString, copy dan component1–component3 untuk ketiga properti.

Properti di luar primary constructor

Metode otomatis hanya mencakup properti dari primary constructor. Jika Anda mendeklarasikan properti di body kelas, properti tersebut tidak berpartisipasi dalam equals, hashCode, toString dan copy.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice TIDAK termasuk dalam equals/hashCode/copy
}

Batasan primary constructor

Primary constructor data class harus mengandung setidaknya satu parameter. Semua parameter harus ditandai dengan val atau var. Modifier open, abstract, sealed atau inner tidak dapat digunakan untuk data class.

Metode otomatis equals, hashCode dan toString

equals dan hashCode dihasilkan berdasarkan nilai semua properti dari primary constructor. Dua instance data class dianggap sama jika semua properti yang sesuai sama.

equals untuk perbandingan nilai

Di Java, perbandingan objek default adalah perbandingan referensi (==). Untuk perbandingan berdasarkan nilai diperlukan override equals. Kotlin data class melakukan ini secara otomatis, memungkinkan penggunaan == untuk perbandingan struktural.

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

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

toString untuk debugging

Metode toString mengembalikan representasi objek yang dapat dibaca dengan nama dan nilai semua properti. Ini secara signifikan menyederhanakan logging dan debugging dibandingkan dengan Java, di mana secara default kode hash ditampilkan dalam format heksadesimal.

Menurut Kotlin Documentation (2026), format toString data class adalah: “User(id=1, name=John, email=john@example.com)”. Saat properti dihapus dari primary constructor, toString diperbarui secara otomatis — risiko desinkronisasi dihilangkan.

Fungsi copy dan destrukturisasi

copy — salah satu kemampuan kunci data class. Membuat salinan dangkal objek dengan kemampuan mengubah nilai properti yang ditentukan.

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 sangat diperlukan dalam gaya fungsional dan arsitektur dengan ketidakberubahan (immutability). Alih-alih mutasi objek yang ada, salinan baru dengan bidang yang diubah dibuat, yang membuat kode lebih dapat diprediksi dan aman dalam skenario multithread.

Destrukturisasi melalui componentN

data class secara otomatis menghasilkan fungsi component1, component2 dan seterusnya untuk setiap properti sesuai urutan deklarasinya. Ini memungkinkan destrukturisasi objek menjadi variabel.

kotlin
val user = User(1, "Alice", "alice@example.com")
val (id, name, email) = user
println("$id: $name ($email)")  // “1: Alice (alice@example.com)”

Destrukturisasi juga berfungsi dalam lambda dan loop for-each, yang membuat data class nyaman untuk bekerja dengan koleksi.

Batasan dan rekomendasi

Pertama — data class tidak mendukung pewarisan dari data class lain. Hanya dapat mewarisi dari kelas biasa atau antarmuka.

Kedua — metode otomatis hanya mencakup properti primary constructor. Properti di body kelas diabaikan, yang dapat menyebabkan equals tidak benar jika Anda lupa hal ini.

Ketiga — data class tidak bisa open, abstract, sealed atau inner. Selalu final.

Keempat — untuk koleksi di dalam data class, copy melakukan penyalinan dangkal. Perubahan elemen dalam koleksi yang disalin akan memengaruhi aslinya.

Menurut Kotlin Best Practices (2026), data class optimal untuk DTO, model API, value objects dan objek status. Untuk komponen dengan logika bisnis, disarankan menggunakan kelas biasa.

Pertanyaan yang sering diajukan

Bisakah data class mewarisi data class lain?

Tidak, data class tidak dapat mewarisi data class lain. Namun dapat mewarisi kelas biasa atau mengimplementasikan antarmuka.

Berapa banyak properti yang harus ada di primary constructor?

Setidaknya satu properti. Jumlah maksimum tidak dibatasi, tetapi untuk destrukturisasi dihasilkan hingga componentN.

Apakah properti dari body kelas termasuk dalam equals?

Tidak, metode otomatis hanya mempertimbangkan properti dari primary constructor. Properti dari body kelas tidak berpartisipasi dalam equals, hashCode, toString dan copy.

Bisakah metode otomatis di-override secara manual?

Ya, Anda dapat meng-override equals, hashCode atau toString di body data class. Dalam hal ini, compiler tidak menghasilkan implementasinya sendiri.

Apa perbedaan data class dengan kelas biasa?

data class secara otomatis menghasilkan equals, hashCode, toString, copy dan componentN. Kelas biasa tidak menyediakan metode ini tanpa implementasi manual.

Ringkasan

  • data class — konstruksi sintaksis Kotlin untuk menyimpan data dengan pembuatan metode otomatis
  • equals dan hashCode — perbandingan struktural berdasarkan properti primary constructor
  • toString — representasi objek yang dapat dibaca untuk debugging dan logging
  • copy — penyalinan dangkal dengan penggantian bidang individual melalui argumen bernama
  • componentN — destrukturisasi objek menjadi variabel untuk bekerja dengan koleksi
  • Batasan — final secara default, setidaknya satu properti, tanpa pewarisan data->data
  • Penggunaan — DTO, model API, value objects, status di MVVM

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga