data class en Kotlin — qué es, sintaxis y características de las clases de datos

Autor: IT Sectr Publicado: 2026-06-20 Tiempo de lectura: 10 min

data class en Kotlin es un tipo especial de clase diseñado exclusivamente para almacenar datos. El compilador genera automáticamente los métodos equals, hashCode, toString, copy y componentN basándose en las propiedades especificadas en el constructor primario. Según la documentación de JetBrains (2026), data class permite reducir el código repetitivo en un 50–70% en comparación con los equivalentes en Java y es la base para objetos de valor en proyectos Kotlin.

Puntos clave

  • data — palabra clave para declarar una clase de datos en Kotlin
  • equals y hashCode — se generan automáticamente basados en todas las propiedades del constructor primario
  • copy — función de copia superficial con posibilidad de reemplazar campos individuales
  • componentN — desestructuración de data class en variables separadas
  • El constructor primario debe contener al menos un parámetro val o var

¿Qué es un data class en Kotlin?

data class es una construcción sintáctica de Kotlin que genera automáticamente métodos estándar para clases cuyo propósito principal es almacenar datos. Al declarar un data class, el compilador crea implementaciones de equals, hashCode, toString, copy y componentN basándose en todas las propiedades del constructor primario.

A diferencia de las clases regulares en Java, donde el desarrollador tiene que escribir manualmente getters, setters, equals, hashCode y toString usando IDE o bibliotecas como Lombok, Kotlin proporciona un mecanismo integrado. Esto no solo reduce el código sino que también garantiza consistencia: los métodos automáticos siempre corresponden a la estructura actual de propiedades.

Según la Encuesta Kotlin de JetBrains (2025), data class se utiliza en el 78% de los proyectos Kotlin, lo que lo convierte en una de las características más demandadas del lenguaje. Es especialmente popular en arquitecturas con DTO, modelos de respuesta API y objetos de estado en MVVM.

Sintaxis y características básicas

data class se declara con la palabra clave data antes de class. Todas las propiedades que participan en los métodos automáticos se especifican en el constructor primario.

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

Una línea de código reemplaza docenas de líneas repetitivas en Java. El compilador genera equals, hashCode, toString, copy y component1–component3 para las tres propiedades.

Propiedades fuera del constructor primario

Los métodos automáticos incluyen solo las propiedades del constructor primario. Si se declara una propiedad en el cuerpo de la clase, no participa en equals, hashCode, toString y copy.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice is NOT included in equals/hashCode/copy
}

Limitaciones del constructor primario

El constructor primario de un data class debe contener al menos un parámetro. Todos los parámetros deben estar marcados como val o var. No se pueden usar modificadores open, abstract, sealed o inner para un data class.

Métodos automáticos equals, hashCode y toString

equals y hashCode se generan basándose en los valores de todas las propiedades del constructor primario. Dos instancias de un data class se consideran iguales si todas sus propiedades correspondientes son iguales.

equals para comparación de valor

En Java, la comparación de objetos por defecto es la comparación de referencias (==). La comparación por valor requiere sobrescribir equals. Kotlin data class hace esto automáticamente, permitiendo usar == para comparación estructural.

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 para depuración

El método toString devuelve una representación legible del objeto con nombres y valores de todas las propiedades. Esto simplifica significativamente el registro y la depuración en comparación con Java, donde la salida predeterminada muestra el código hash en formato hexadecimal.

Según la Documentación de Kotlin (2026), toString de un data class tiene el formato: “User(id=1, name=John, email=john@example.com)”. Al eliminar propiedades del constructor primario, toString se actualiza automáticamente — el riesgo de desincronización se elimina.

Función copy y desestructuración

copy es una de las características clave de data class. Crea una copia superficial del objeto con la posibilidad de cambiar los valores de propiedades especificadas.

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 es indispensable en el estilo funcional y arquitecturas con inmutabilidad. En lugar de mutar un objeto existente, se crea una nueva copia con campos modificados, lo que hace que el código sea más predecible y seguro en escenarios multihilo.

Desestructuración mediante componentN

data class genera automáticamente las funciones component1, component2 y así sucesivamente para cada propiedad en el orden en que se declaran. Esto permite desestructurar el objeto en variables.

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

La desestructuración también funciona en lambdas y bucles for-each, lo que hace que data class sea conveniente para trabajar con colecciones.

Limitaciones y recomendaciones

La primera limitación — data class no admite herencia de otro data class. Solo se puede heredar de clases regulares o interfaces.

La segunda — los métodos automáticos incluyen solo las propiedades del constructor primario. Las propiedades en el cuerpo de la clase se ignoran, lo que puede llevar a un equals incorrecto si olvida esto.

La tercera — data class no puede ser open, abstract, sealed o inner. Siempre es final.

La cuarta — para colecciones dentro de un data class, copy realiza una copia superficial. Cambiar elementos dentro de la colección copiada afectará al original.

Según las Mejores Prácticas de Kotlin (2026), data class es óptimo para DTO, modelos API, objetos de valor y objetos de estado. Para componentes con lógica de negocio, se recomienda usar clases regulares.

Preguntas Frecuentes

¿Puede un data class heredar de otro data class?

No, un data class no puede heredar de otro data class. Sin embargo, puede heredar de una clase regular o implementar interfaces.

¿Cuántas propiedades debe tener el constructor primario?

Al menos una propiedad. El número máximo no está limitado, pero componentN se genera para desestructuración.

¿Las propiedades del cuerpo de la clase afectan a equals?

No, los métodos automáticos solo consideran las propiedades del constructor primario. Las propiedades del cuerpo de la clase no participan en equals, hashCode, toString y copy.

¿Puedo sobrescribir los métodos automáticos manualmente?

Sí, usted puede sobrescribir equals, hashCode o toString en el cuerpo del data class. En este caso, el compilador no genera su propia implementación.

¿En qué se diferencia data class de una clase regular?

Un data class genera automáticamente equals, hashCode, toString, copy y componentN. Una clase regular no proporciona estos métodos sin implementación manual.

Resumen

  • data class — construcción sintáctica de Kotlin para almacenar datos con métodos auto-generados
  • equals y hashCode — comparación estructural basada en propiedades del constructor primario
  • toString — representación legible del objeto para depuración y registro
  • copy — copia superficial con reemplazo de campos individuales por argumentos nombrados
  • componentN — desestructuración de objetos en variables para trabajo conveniente con colecciones
  • Limitaciones — final por defecto, al menos una propiedad, sin herencia data->data
  • Uso — DTO, modelos API, objetos de valor, estado en MVVM

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también