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-и, где програмер мора ручно да пише getter-е, setter-е, equals, hashCode и toString помоћу IDE-а или библиотека попут Lombok-а, Kotlin пружа уграђени механизам. Ово не само да скраћује код, већ и гарантује конзистентност — аутоматске методе увек одговарају тренутној структури својстава.

Према подацима JetBrains Kotlin Survey (2025), data class се користи у 78% Kotlin пројеката, што га чини једном од најтраженијих могућности језика. Посебно је популаран у архитектурама са DTO, моделима API одговора и state-објектима у 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)  // true

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 и state-објекте. За компоненте са пословном логиком препоручује се коришћење обичних класа.

Често постављана питања

Може ли 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, state у MVVM-у

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође