data class sa Kotlin — ano ito, syntax at mga katangian ng mga klase ng data

May-akda: IT Sectr Nai-publish: 2026-06-20 Oras ng pagbabasa: 10 min

data class sa Kotlin ay isang espesyal na uri ng klase na eksklusibong idinisenyo para sa pag-iimbak ng data. Awtomatikong bumubuo ang compiler ng mga pamamaraan na equals, hashCode, toString, copy at componentN batay sa mga property na tinukoy sa primary constructor. Ayon sa dokumentasyon ng JetBrains (2026), pinapayagan ng data class na bawasan ang dami ng boilerplate code ng 50–70% kumpara sa mga katumbas ng Java at ito ang batayan para sa mga value-object sa mga proyekto ng Kotlin.

Mga pangunahing puntos

  • data — keyword para sa pagdedeklara ng klase ng data sa Kotlin
  • equals at hashCode — awtomatikong nabubuo batay sa lahat ng property ng primary constructor
  • copy — function ng mababaw na pagkopya na may kakayahang palitan ang mga indibidwal na field
  • componentN — destructuring ng data class sa magkakahiwalay na variable
  • Primary constructor ay dapat maglaman ng hindi bababa sa isang val o var parameter

Ano ang data class sa Kotlin?

data class ay isang syntax construction ng Kotlin na awtomatikong bumubuo ng mga standard na pamamaraan para sa mga klase na ang pangunahing layunin ay mag-imbak ng data. Sa pagdedeklara ng data class, lumilikha ang compiler ng mga implementasyon ng equals, hashCode, toString, copy at componentN batay sa lahat ng property mula sa primary constructor.

Hindi tulad ng mga ordinaryong klase sa Java, kung saan ang developer ay kailangang manu-manong magsulat ng mga getter, setter, equals, hashCode at toString gamit ang IDE o mga library tulad ng Lombok, ang Kotlin ay nagbibigay ng built-in na mekanismo. Hindi lamang nito pinaiikli ang code, ngunit ginagarantiyahan din ang pagkakapare-pareho — ang mga awtomatikong pamamaraan ay palaging tumutugma sa kasalukuyang istraktura ng mga property.

Ayon sa data ng JetBrains Kotlin Survey (2025), ang data class ay ginagamit sa 78% ng mga proyekto ng Kotlin, na ginagawa itong isa sa mga pinaka-hinahanap na kakayahan ng wika. Ito ay lalong popular sa mga arkitektura na may DTO, mga modelo ng tugon ng API at mga state-object sa MVVM.

Syntax at mga pangunahing kakayahan

data class ay idinedeklara gamit ang keyword na data bago ang class. Lahat ng property na lumalahok sa mga awtomatikong pamamaraan ay tinukoy sa primary constructor.

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

Isang linya ng code ang pumapalit sa dose-dosenang linya ng boilerplate sa Java. Bumubuo ang compiler ng equals, hashCode, toString, copy at component1–component3 para sa lahat ng tatlong property.

Mga property sa labas ng primary constructor

Ang mga awtomatikong pamamaraan ay sumasaklaw lamang sa mga property mula sa primary constructor. Kung magdedeklara ka ng property sa body ng klase, hindi ito lumalahok sa equals, hashCode, toString at copy.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // Ang cachedPrice ay HINDI kasama sa equals/hashCode/copy
}

Mga limitasyon ng primary constructor

Ang primary constructor ng data class ay dapat maglaman ng hindi bababa sa isang parameter. Lahat ng parameter ay dapat markahan ng val o var. Hindi maaaring gamitin ang mga modifier na open, abstract, sealed o inner para sa data class.

Mga awtomatikong pamamaraan na equals, hashCode at toString

Ang equals at hashCode ay nabubuo batay sa mga halaga ng lahat ng property mula sa primary constructor. Dalawang instance ng data class ay itinuturing na pantay kung ang lahat ng kanilang kaukulang property ay pantay.

equals para sa paghahambing ng halaga

Sa Java, ang default na paghahambing ng mga bagay ay paghahambing ng referens (==). Para sa paghahambing batay sa halaga, kinakailangan ang override ng equals. Awtomatikong ginagawa ito ng Kotlin data class, na nagpapahintulot sa paggamit ng == para sa estruktural na paghahambing.

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

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

toString para sa debugging

Ang toString na pamamaraan ay nagbabalik ng nababasang representasyon ng bagay na may mga pangalan at halaga ng lahat ng property. Ito ay makabuluhang nagpapasimple sa logging at debugging kumpara sa Java, kung saan ang default ay nagpapakita ng hash code sa hexadecimal na format.

Ayon sa Kotlin Documentation (2026), ang format ng toString ng data class ay: “User(id=1, name=John, email=john@example.com)”. Kapag tinanggal ang mga property mula sa primary constructor, awtomatikong naa-update ang toString — ang panganib ng desynchronization ay inaalis.

Ang copy function at destructuring

copy — isa sa mga pangunahing kakayahan ng data class. Lumilikha ng mababaw na kopya ng bagay na may kakayahang baguhin ang mga halaga ng tinukoy na mga property.

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”

Ang copy ay kailangang-kailangan sa functional na estilo at mga arkitektura na may immutability. Sa halip na mutasyon ng umiiral na bagay, isang bagong kopya na may binagong mga field ang nilikha, na ginagawang mas predictable at ligtas ang code sa mga multithreaded na senaryo.

Destructuring sa pamamagitan ng componentN

Ang data class ay awtomatikong bumubuo ng mga function na component1, component2 at iba pa para sa bawat property ayon sa pagkakasunod-sunod ng deklarasyon. Pinapayagan nito ang destructuring ng bagay sa mga variable.

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

Ang destructuring ay gumagana rin sa mga lambda at for-each loops, na ginagawang maginhawa ang data class para sa pagtatrabaho sa mga koleksyon.

Mga limitasyon at rekomendasyon

Una — hindi sinusuportahan ng data class ang pagmamana mula sa ibang data class. Maaari lamang magmana mula sa mga ordinaryong klase o interface.

Pangalawa — ang mga awtomatikong pamamaraan ay sumasaklaw lamang sa mga property ng primary constructor. Ang mga property sa body ng klase ay binabalewala, na maaaring humantong sa hindi tamang equals kung makakalimutan mo ito.

Pangatlo — ang data class ay hindi maaaring maging open, abstract, sealed o inner. Ito ay palaging final.

Pang-apat — para sa mga koleksyon sa loob ng data class, ang copy ay nagsasagawa ng mababaw na pagkopya. Ang pagbabago ng mga elemento sa loob ng kinopyang koleksyon ay makakaapekto sa orihinal.

Ayon sa Kotlin Best Practices (2026), ang data class ay optimal para sa DTO, mga modelo ng API, value objects at mga state-object. Para sa mga component na may business logic, inirerekomenda ang paggamit ng mga ordinaryong klase.

Mga madalas itanong

Maaari bang magmana ang data class ng ibang data class?

Hindi, ang data class ay hindi maaaring magmana ng ibang data class. Gayunpaman, maaari itong magmana ng ordinaryong klase o magpatupad ng mga interface.

Ilang property ang dapat nasa primary constructor?

Hindi bababa sa isang property. Ang maximum na bilang ay hindi limitado, ngunit para sa destructuring ay nabubuo hanggang componentN.

Kasama ba sa equals ang mga property mula sa body ng klase?

Hindi, ang mga awtomatikong pamamaraan ay isinasaalang-alang lamang ang mga property mula sa primary constructor. Ang mga property mula sa body ng klase ay hindi lumalahok sa equals, hashCode, toString at copy.

Maaari bang manual na i-override ang mga awtomatikong pamamaraan?

Oo, maaari mong i-override ang equals, hashCode o toString sa body ng data class. Sa kasong ito, hindi bumubuo ang compiler ng sarili nitong implementasyon.

Ano ang pagkakaiba ng data class sa ordinaryong klase?

Ang data class ay awtomatikong bumubuo ng equals, hashCode, toString, copy at componentN. Ang ordinaryong klase ay hindi nagbibigay ng mga pamamaraang ito nang walang manual na implementasyon.

Buod

  • data class — syntax construction ng Kotlin para sa pag-iimbak ng data na may auto-generation ng mga pamamaraan
  • equals at hashCode — estruktural na paghahambing batay sa mga property ng primary constructor
  • toString — nababasang representasyon ng bagay para sa debugging at logging
  • copy — mababaw na pagkopya na may pagpapalit ng mga indibidwal na field sa pamamagitan ng mga pinangalanang argumento
  • componentN — destructuring ng mga bagay sa mga variable para sa maginhawang pagtatrabaho sa mga koleksyon
  • Mga limitasyon — final bilang default, hindi bababa sa isang property, walang pagmamanang data->data
  • Paggamit — DTO, mga modelo ng API, value objects, estado sa MVVM

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din