Что такое Data Class (Класс данных) в ООП?

«Что такое Data Class (Класс данных) в ООП?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Data Class (Класс данных) — это шаблон проектирования, основная цель которого — хранение состояния (данных) с минимальной бизнес-логикой. Он предоставляет стандартные методы для работы с данными: доступ, сравнение и строковое представление.

Характеристики:

  • Содержит преимущественно поля (состояние) и методы доступа к ним.
  • Часто является immutable (неизменяемым).
  • Реализует equals(), hashCode(), toString().
  • Может включать методы-компоненты (component functions), например, для деструктуризации.

Пример в Java (без Lombok):

public final class Person {
    private final String name;
    private final int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // Геттеры, equals(), hashCode(), toString()...
}

Пример в Kotlin (встроенная поддержка):

data class Person(val name: String, val age: Int)
// Автоматически генерируются: getters, equals(), hashCode(), toString(), copy(), componentN()

Использование в Java с Lombok:

import lombok.Data;

@Data // Генерирует геттеры, сеттеры, equals, hashCode, toString
public class Person {
    private String name;
    private int age;
}

Когда использовать:

  • Транспортные объекты (DTO).
  • Модели для представления данных из БД.
  • Объекты-значения (Value Objects) в предметно-ориентированном проектировании (DDD).

Альтернативы: Records (Java 14+), Case Classes (Scala).