data class στην Kotlin — τι είναι, σύνταξη και χαρακτηριστικά των κλάσεων δεδομένων

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-20 Χρόνος ανάγνωσης: 10 λεπ

data class στην Kotlin είναι ένας ειδικός τύπος κλάσης που προορίζεται αποκλειστικά για αποθήκευση δεδομένων. Ο μεταγλωττιστής δημιουργεί αυτόματα τις μεθόδους equals, hashCode, toString, copy και componentN με βάση τις ιδιότητες που καθορίζονται στο primary constructor. Σύμφωνα με την τεκμηρίωση της JetBrains (2026), το data class επιτρέπει τη μείωση του όγκου του boilerplate κώδικα κατά 50–70% σε σύγκριση με τα αντίστοιχα Java και αποτελεί τη βάση για value-αντικείμενα σε έργα Kotlin.

Κύρια σημεία

  • data — λέξη-κλειδί για δήλωση κλάσης δεδομένων στην Kotlin
  • equals και hashCode — δημιουργούνται αυτόματα βάσει όλων των ιδιοτήτων του primary constructor
  • copy — συνάρτηση επιφανειακής αντιγραφής με δυνατότητα αντικατάστασης μεμονωμένων πεδίων
  • componentN — αποδόμηση του data class σε ξεχωριστές μεταβλητές
  • Primary constructor πρέπει να περιέχει τουλάχιστον μία παράμετρο val ή var

Τι είναι το data class στην Kotlin;

data class είναι μια συντακτική κατασκευή της Kotlin που δημιουργεί αυτόματα τυπικές μεθόδους για κλάσεις των οποίων ο κύριος σκοπός είναι η αποθήκευση δεδομένων. Κατά τη δήλωση ενός data class, ο μεταγλωττιστής δημιουργεί υλοποιήσεις των equals, hashCode, toString, copy και componentN βάσει όλων των ιδιοτήτων από το primary constructor.

Σε αντίθεση με τις συνηθισμένες κλάσεις στη Java, όπου ο προγραμματιστής πρέπει να γράφει χειροκίνητα getters, setters, equals, hashCode και toString χρησιμοποιώντας IDE ή βιβλιοθήκες όπως Lombok, η Kotlin παρέχει έναν ενσωματωμένο μηχανισμό. Αυτό όχι μόνο συντομεύει τον κώδικα, αλλά και εγγυάται συνέπεια — οι αυτόματες μέθοδοι αντιστοιχούν πάντα στην τρέχουσα δομή ιδιοτήτων.

Σύμφωνα με τα δεδομένα JetBrains Kotlin Survey (2025), το data class χρησιμοποιείται στο 78% των έργων Kotlin, καθιστώντας το ένα από τα πιο περιζήτητα χαρακτηριστικά της γλώσσας. Είναι ιδιαίτερα δημοφιλές σε αρχιτεκτονικές με DTO, μοντέλα απόκρισης API και αντικείμενα κατάστασης σε MVVM.

Σύνταξη και βασικές δυνατότητες

data class δηλώνεται με τη λέξη-κλειδί data πριν από το class. Όλες οι ιδιότητες που συμμετέχουν στις αυτόματες μεθόδους καθορίζονται στο primary constructor.

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

Μία γραμμή κώδικα αντικαθιστά δεκάδες γραμμές boilerplate στη Java. Ο μεταγλωττιστής δημιουργεί equals, hashCode, toString, copy και component1–component3 και για τις τρεις ιδιότητες.

Ιδιότητες εκτός primary constructor

Οι αυτόματες μέθοδοι περιλαμβάνουν μόνο ιδιότητες από το primary constructor. Εάν δηλώσετε μια ιδιότητα στο σώμα της κλάσης, δεν συμμετέχει στα equals, hashCode, toString και copy.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // Το cachedPrice ΔΕΝ περιλαμβάνεται στο equals/hashCode/copy
}

Περιορισμοί primary constructor

Ο primary constructor ενός data class πρέπει να περιέχει τουλάχιστον μία παράμετρο. Όλες οι παράμετροι πρέπει να επισημαίνονται με val ή var. Δεν μπορούν να χρησιμοποιηθούν οι τροποποιητές open, abstract, sealed ή inner για data class.

Αυτόματες μέθοδοι equals, hashCode και toString

Τα equals και hashCode δημιουργούνται βάσει των τιμών όλων των ιδιοτήτων από το primary constructor. Δύο στιγμιότυπα data class θεωρούνται ίσα αν όλες οι αντίστοιχες ιδιότητές τους είναι ίσες.

equals για σύγκριση τιμών

Στη Java, η προεπιλεγμένη σύγκριση αντικειμένων είναι σύγκριση αναφορών (==). Για σύγκριση βάσει τιμής απαιτείται παράκαμψη του equals. Το Kotlin data class το κάνει αυτόματα, επιτρέποντας τη χρήση == για δομική σύγκριση.

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

val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2)  // αληθές

toString για αποσφαλμάτωση

Η μέθοδος toString επιστρέφει μια αναγνώσιμη αναπαράσταση του αντικειμένου με ονόματα και τιμές όλων των ιδιοτήτων. Αυτό απλοποιεί σημαντικά την καταγραφή και την αποσφαλμάτωση σε σύγκριση με τη Java, όπου προεπιλεγμένα εμφανίζεται ο hash-κώδικας σε δεκαεξαδική μορφή.

Σύμφωνα με Kotlin Documentation (2026), η μορφή toString του data class είναι: “User(id=1, name=John, email=john@example.com)”. Κατά την αφαίρεση ιδιοτήτων από το primary constructor, το toString ενημερώνεται αυτόματα — ο κίνδυνος αποσυγχρονισμού αποκλείεται.

Η συνάρτηση copy και η αποδόμηση

copy — μία από τις βασικές δυνατότητες του data class. Δημιουργεί ένα επιφανειακό αντίγραφο του αντικειμένου με δυνατότητα αλλαγής των τιμών καθορισμένων ιδιοτήτων.

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 είναι απαραίτητο σε λειτουργικό στυλ και αρχιτεκτονικές με αμεταβλητότητα (immutability). Αντί για μετάλλαξη του υπάρχοντος αντικειμένου, δημιουργείται ένα νέο αντίγραφο με τροποποιημένα πεδία, καθιστώντας τον κώδικα πιο προβλέψιμο και ασφαλή σε πολυνηματικά σενάρια.

Αποδόμηση μέσω componentN

Το data class δημιουργεί αυτόματα συναρτήσεις component1, component2 και ούτω καθεξής για κάθε ιδιότητα με τη σειρά δήλωσής τους. Αυτό επιτρέπει την αποδόμηση του αντικειμένου σε μεταβλητές.

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

Η αποδόμηση λειτουργεί επίσης σε λάμδα και βρόχους for-each, καθιστώντας το data class βολικό για εργασία με συλλογές.

Περιορισμοί και συστάσεις

Πρώτος περιορισμός — το data class δεν υποστηρίζει κληρονομικότητα από άλλο data class. Μπορεί να κληρονομήσει μόνο από συνηθισμένες κλάσεις ή διεπαφές.

Δεύτερος — οι αυτόματες μέθοδοι περιλαμβάνουν μόνο ιδιότητες του primary constructor. Οι ιδιότητες στο σώμα της κλάσης αγνοούνται, που μπορεί να οδηγήσει σε εσφαλμένο equals αν το ξεχάσετε.

Τρίτος — το data class δεν μπορεί να είναι open, abstract, sealed ή inner. Είναι πάντα final.

Τέταρτος — για συλλογές εντός του data class, το copy εκτελεί επιφανειακή αντιγραφή. Η αλλαγή στοιχείων εντός του αντιγραμμένου συνόλου θα επηρεάσει το πρωτότυπο.

Σύμφωνα με Kotlin Best Practices (2026), το data class είναι βέλτιστο για DTO, μοντέλα API, value objects και αντικείμενα κατάστασης. Για εξαρτήματα με επιχειρηματική λογική, συνιστάται η χρήση συνηθισμένων κλάσεων.

Συχνές ερωτήσεις

Μπορεί το data class να κληρονομήσει άλλο data class;

Όχι, το data class δεν μπορεί να κληρονομήσει άλλο data class. Ωστόσο, μπορεί να κληρονομήσει μια συνηθισμένη κλάση ή να υλοποιήσει διεπαφές.

Πόσες ιδιότητες πρέπει να υπάρχουν στο primary constructor;

Τουλάχιστον μία ιδιότητα. Ο μέγιστος αριθμός δεν είναι περιορισμένος, αλλά για αποδόμηση δημιουργείται έως componentN.

Συμπεριλαμβάνονται οι ιδιότητες από το σώμα της κλάσης στο equals;

Όχι, οι αυτόματες μέθοδοι λαμβάνουν υπόψη μόνο ιδιότητες από το primary constructor. Οι ιδιότητες από το σώμα της κλάσης δεν συμμετέχουν στα equals, hashCode, toString και copy.

Μπορούν οι αυτόματες μέθοδοι να παρακαμφθούν χειροκίνητα;

Ναι, μπορείτε να παρακάμψετε τα equals, hashCode ή toString στο σώμα του data class. Σε αυτήν την περίπτωση, ο μεταγλωττιστής δεν δημιουργεί δική του υλοποίηση.

Σε τι διαφέρει το data class από μια συνηθισμένη κλάση;

Το data class δημιουργεί αυτόματα equals, hashCode, toString, copy και componentN. Μια συνηθισμένη κλάση δεν παρέχει αυτές τις μεθόδους χωρίς χειροκίνητη υλοποίηση.

Σύνοψη

  • data class — συντακτική κατασκευή Kotlin για αποθήκευση δεδομένων με αυτόματη δημιουργία μεθόδων
  • equals και hashCode — δομική σύγκριση βάσει ιδιοτήτων primary constructor
  • toString — αναγνώσιμη αναπαράσταση αντικειμένου για αποσφαλμάτωση και καταγραφή
  • copy — επιφανειακή αντιγραφή με αντικατάσταση μεμονωμένων πεδίων μέσω ονομασμένων ορισμάτων
  • componentN — αποδόμηση αντικειμένων σε μεταβλητές για βολική εργασία με συλλογές
  • Περιορισμοί — final προεπιλεγμένα, τουλάχιστον μία ιδιότητα, χωρίς κληρονομικότητα data->data
  • Χρήση — DTO, μοντέλα API, value objects, κατάσταση σε MVVM

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης