data class у Kotlin-у је специјални тип класе намењен искључиво за чување података. Компајлер аутоматски генерише методе equals, hashCode, toString, copy и componentN на основу својстава наведених у primary constructor-у. Према документацији JetBrains-а (2026), data class омогућава смањење обима boilerplate кода за 50–70% у поређењу са Java еквивалентима и представља основу за value-објекте у 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-у.
data class User(
val id: Int,
val name: String,
val email: String
)
Један ред кода замењује десетине редова boilerplate-а у Java-и. Компајлер генерише equals, hashCode, toString, copy и component1–component3 за сва три својства.
Аутоматске методе укључују само својства из primary constructor-а. Ако се својство декларише у телу класе, оно не учествује у equals, hashCode, toString и copy.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice НИЈЕ укључен у equals/hashCode/copy
}
Primary constructor data class-а мора да садржи најмање један параметар. Сви параметри морају бити означени са val или var. Не могу се користити модификатори open, abstract, sealed или inner за data class.
equals и hashCode се генеришу на основу вредности свих својстава из primary constructor-а. Две инстанце data class-а се сматрају једнаким ако су сва њихова одговарајућа својства једнака.
У Java-и подразумевано поређење објеката је поређење референци (==). За поређење по вредности потребно је преоптерећење equals-а. Kotlin data class то ради аутоматски, омогућавајући коришћење == за структурно поређење.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // true
Метод toString враћа читљиву репрезентацију објекта са именима и вредностима свих својстава. Ово значајно поједностављује логирање и отклањање грешака у поређењу са Java-ом, где се подразумевано приказује hash-код у хексадецималном формату.
Према Kotlin Documentation (2026), toString data class-а има формат: “User(id=1, name=John, email=john@example.com)”. При уклањању својстава из primary constructor-а, toString се аутоматски ажурира — ризик од десинхронизације је искључен.
copy — једна од кључних могућности data class-а. Креира површну копију објекта са могућношћу измене вредности наведених својстава.
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). Уместо мутације постојећег објекта, креира се нова копија са измењеним пољима, што чини код предвидљивијим и сигурнијим у вишенитним сценаријима.
data class аутоматски генерише функције component1, component2 и тако даље за свако својство редом њиховог декларисања. Ово омогућава деструктуризацију објекта на променљиве.
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. Међутим, може да наследи обичну класу или да имплементира интерфејсе.
Најмање једно својство. Максималан број није ограничен, али се за деструктуризацију генерише до componentN.
Не, аутоматске методе узимају у обзир само својства из primary constructor-а. Својства из тела класе не учествују у equals, hashCode, toString и copy.
Да, можете преоптеретити equals, hashCode или toString у телу data class-а. У том случају компајлер не генерише своју имплементацију.
data class аутоматски генерише equals, hashCode, toString, copy и componentN. Обична класа не пружа ове методе без ручне имплементације.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође