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 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.
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.
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.
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.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// Ang cachedPrice ay HINDI kasama sa equals/hashCode/copy
}
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.
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.
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.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // totoo
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.
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.
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.
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.
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.
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
Hindi, ang data class ay hindi maaaring magmana ng ibang data class. Gayunpaman, maaari itong magmana ng ordinaryong klase o magpatupad ng mga interface.
Hindi bababa sa isang property. Ang maximum na bilang ay hindi limitado, ngunit para sa destructuring ay nabubuo hanggang componentN.
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.
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.
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
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.
Basahin din